我有一个指针数组(我通过调用创建new ptr*[size]).所有这些指针都指向一个也放在堆上的对象.
删除数组和所有新的ptr的正确方法是什么?
这就是我现在所做的:
for (int i = 0; i < size; i++) delete array[i];
delete[] array; // Not sure since this double deletes array[0]
Run Code Online (Sandbox Code Playgroud)
这是否符合我的想法?
谢谢
分配的每个指针new都得到一个对应的delete.分配的每个指针new []都得到一个对应的delete [].这真的是你需要知道的.当然,当你有一个包含动态分配指针的动态分配数组时,释放必须以相反的顺序发生.
因此,正确的成语将是......
int main()
{
int **container = new int*[n];
for(int i = 0; i < n; ++i)
container[i] = new int[size];
// ... and to deallocate...
for(int i = 0; i < n; ++i)
delete [] container[i];
delete [] container;
}
Run Code Online (Sandbox Code Playgroud)
然后当然我说"停止这样做"并建议你使用std::array或std::vector(和模板类型unique_ptr<int>).