C / C ++删除vs删除[]

时间:2012-07-03 03:45:09

标签: c++ delete-operator

  

可能重复:
  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;
     

注意:回复不正确:“不,一切都正确”,“只有第一个   数组的元素将被删除“,”整个数组将被删除   删除,但只有第一个元素析构函数将被称为“。

提出了一个问题,那个代码块会发生什么?我逻辑上认为它是“只删除数组的第一个元素”,但似乎没有。有人可以对此有所了解吗?

1 个答案:

答案 0 :(得分:3)

  • delete:这将释放当前由执行删除的指针分配的内存。 删除第一个变量指向的内存。

  • delete []:这将释放为整个阵列分配的内存。一个数组由几个变量组成 - 删除释放仅为第一个变量分配的内存,而delete []完成整个事件。

考虑它的好方法是将delete []作为循环考虑删除;数组循环的地方,并在数组中的每个变量上单独调用delete。这不是它在现实中的工作原理(真正的工作有点复杂),但是理解差异的好方法。

在所有对象上调用析构函数,因为在某些情况下,例如在包含指针的对象数组的情况下,仅在第一个元素上调用析构函数不会释放所有内存。