C++ 动态大小的原始数组
示例
//原始动态尺寸数组示例。通常最好使用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;
}一个Ta[n];在n运行时声明数组的程序可以与某些支持C99可变长度数组(VLA)作为语言扩展的编译器一起编译。但是标准C++不支持VLA。本示例说明如何通过new[]-expression手动分配动态大小数组,
int* a = new int[n]; //←分配n个项目的数组。
…然后使用它,最后通过delete[]-expression释放它:
delete[] a;
此处分配的数组具有不确定的值,但是可以通过添加空括号将其初始化为零(),如下所示:newint[n]()。更一般而言,对于任意项类型,这将执行值初始化。
作为调用层次结构中函数的一部分,该代码将不是异常安全的,因为在delete[]表达式之前(和之后new[])的异常会导致内存泄漏。解决该问题的一种方法是通过例如std::unique_ptr智能指针自动进行清理。但是解决该问题的一种更好的方法通常是使用std::vector:std::vector。