数组
也可以用new建立对象的数组。例如,
char* save_string(const char* p)
{
char* s = new char[strlen(p) + 1];
strcpy(s, p); // 从p复制到s
return s;
}
int main(int argc, char* argv[])
{
if(argc < 2) exit(1);
char* p = save_string(argv[1]);
// ...
delete [] p;
}
“简单的” delete运算符只能用于删除单个的对象,删除数组需要用delete[]。
为了释放由new分配的空间,delete和delete[]必须能够确定为对象分配的空间大小。这也意味着通过标准实现的new分配的对象将占用比静态对象稍微大一点的空间。在典型情况下需要用一个机器字保存对象的大小。
请注意,一个vector(3.7.1节、16.3节)是一个普通对象。因此可以用简单的new和delete分配和释放。例如,
void f(int n)
{
vector<int>* p = new vector<int>(n); // 单个的对象
int* q = new int[n]; // 数组
// ...
delete p;
delete[] q;
}
delete[] 运算符只能应用于由new返回的到一个数组的指针或者0,应用到0时不会产生任何影响。
注意⚠️:为了使delete能正确的释放由new分配的空间,请不要移动指针的位置。 —-沈军注
🔚