所以我习惯于在C中进行内存管理,在那里free(pointer)
将释放pointer
指向的所有空间。现在,当我试图在C++中做一些简单的事情时,我自己感到困惑。
如果我有一个类似于这样分配的双精度浮点数的二维数组
double** atoms = new double*[1000];
for(int i = 0; i < 1000; i++)
atoms[i] = new double[4];
什么是释放由new分配在堆上的内存的正确方法?
我的想法最初是这样的(因为我脑海中想到的是C语言):
for(int i = 0; i < 1000; i++)
delete atoms[i];
delete atoms;
但是我忘记了delete[]
运算符的存在,所以我相信正确的方法如下:
for(int i = 0; i < 1000; i++)
delete[] atoms[i];
delete[] atoms;
是否理解delete
和delete[]
操作符之间的区别很重要?还是说我可以假设每当我使用ptr = new x[]
来分配数组时,我必须使用delete[] ptr
进行释放?
delete []
的版本是有效的。如果您为非数组对象调用delete []
,则会出现未定义行为。您可以在其他 SO 问题中看到:https://dev59.com/lG855IYBdhLWcg3wlVca - gomons