//原始动态尺寸数组示例。通常最好使用std :: vector。 #include <algorithm> // std :: sort #include <iostream> using namespace std; auto int_from( istream& in ) -> int { int x; in >> x; return x; } auto main() -> int { cout << "Sorting n integers provided by you.\n"; cout << "n? "; int const n = int_from( cin ); int* a = new int[n]; // ←分配n个项目的数组。 for( int i = 1; i <= n; ++i ) { cout << "The #" << i << " number, please: "; a[i-1] = int_from( cin ); } sort( a, a + n ); for( int i = 0; i < n; ++i ) { cout << a[i] << ' '; } cout << '\n'; delete[] a; }
一个T a[n];在n运行时声明数组的程序可以与某些支持C99可变长度数组(VLA)作为语言扩展的编译器一起编译。但是标准C ++不支持VLA。本示例说明如何通过new[]-expression手动分配动态大小数组,
int* a = new int[n]; // ←分配n个项目的数组。
…然后使用它,最后通过delete[]-expression释放它:
delete[] a;
此处分配的数组具有不确定的值,但是可以通过添加空括号将其初始化为零(),如下所示:new int[n]()。更一般而言,对于任意项类型,这将执行值初始化。
作为调用层次结构中函数的一部分,该代码将不是异常安全的,因为在delete[]表达式之前(和之后new[])的异常会导致内存泄漏。解决该问题的一种方法是通过例如std::unique_ptr智能指针自动进行清理。但是解决该问题的一种更好的方法通常是使用std::vector:std::vector。