3

可能重复:
将 new[] 与 delete 配对如何可能仅导致内存泄漏?
删除与删除[]

我刚开始学习 C/C++,有人告诉我使用 delete 删除单个对象并将 delete [] 用于数组。

然后我发现这个网站问这个问题

这段代码有什么问题吗?

T *p = new T[10];
delete p;

注意:不正确的回复:“不,一切都正确”、“只会删除数组的第一个元素”、“将删除整个数组,但只会调用第一个元素的析构函数”。

这就提出了一个问题,该代码块中发生了什么?从逻辑上讲,我会认为这是“仅删除数组的第一个元素”,但似乎不是。有人可以对此有所了解吗?

4

1 回答 1

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

  • delete []:这会释放为整个数组分配的内存。一个数组由几个变量组成 - delete 释放分配给第一个变量的内存,而 delete [] 完成整个事情。

考虑它的一个好方法是将 delete 视为指令,而将 delete [] 视为循环;其中数组循环并在数组中的每个变量上单独调用删除。这不是它在现实中的工作方式(实际工作方式要复杂一些),但这是理解差异的好方法。

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

于 2012-07-03T03:55:49.463 回答