所以我习惯于在C中进行内存管理,这free(pointer)将释放所有指向的空间pointer.现在,当我尝试用C++做一些简单的事情时,我会感到困惑.
如果我有一个二维数组的双精度分配方式与此类似
double** atoms = new double*[1000];
for(int i = 0; i < 1000; i++)
atoms[i] = new double[4];
Run Code Online (Sandbox Code Playgroud)
什么是释放新分配的堆上的内存的正确方法?
我的想法原来是这样的(因为我的大脑在用C思考):
for(int i = 0; i < 1000; i++)
delete atoms[i];
delete atoms;
Run Code Online (Sandbox Code Playgroud)
但是我忘记了delete[]运算符的存在,所以我相信正确的方法如下:
for(int i = 0; i < 1000; i++)
delete[] atoms[i];
delete[] atoms;
Run Code Online (Sandbox Code Playgroud)
理解delete和delete[]运营商之间的区别是否重要?或者我可以假设每当我分配一个数组时,ptr = new x[]我还必须解除分配delete[] ptr?