可能重复:
How could pairing new[] with delete possibly lead to memory leak only?
delete vs delete[]
我刚刚开始学习C / C ++,并且我被告知使用delete删除单个对象并使用delete []作为数组。
然后我找到this website提出这个问题
此代码有什么问题吗?
T *p = new T[10]; delete p;
注意:回复不正确:“不,一切都正确”,“只有第一个 数组的元素将被删除“,”整个数组将被删除 删除,但只有第一个元素析构函数将被称为“。
提出了一个问题,那个代码块会发生什么?我逻辑上认为它是“只删除数组的第一个元素”,但似乎没有。有人可以对此有所了解吗?
答案 0 :(得分:3)
delete:这将释放当前由执行删除的指针分配的内存。 仅删除第一个变量指向的内存。
delete []:这将释放为整个阵列分配的内存。一个数组由几个变量组成 - 删除释放仅为第一个变量分配的内存,而delete []完成整个事件。
考虑它的好方法是将delete []作为循环考虑删除;数组循环的地方,并在数组中的每个变量上单独调用delete。这不是它在现实中的工作原理(真正的工作有点复杂),但是理解差异的好方法。
在所有对象上调用析构函数,因为在某些情况下,例如在包含指针的对象数组的情况下,仅在第一个元素上调用析构函数不会释放所有内存。