102

可能重复:
(POD)释放内存:delete[] 等于 delete 吗?

当我学习 C++ 时,这是很久以前的事了。我被告知永远不要使用delete,但在单个对象上delete[]执行delete[]将等同于delete. 知道不要太相信老师,我想知道,这是真的吗?

有没有理由打电话delete而不是打电话delete[]

我已经扫描了 SO 中可能相关的问题,但没有找到任何明确的答案。

4

4 回答 4

115

从标准(5.3.5/2):

在第一种选择(删除对象)中,delete 操作数的值应是指向非数组对象的指针或指向表示此类对象的基类的子对象(1.8)的指针(第 10 条)。 如果不是,则行为未定义。

在第二种选择(删除数组)中,delete 的操作数的值应该是从前一个数组 new 表达式产生的指针值。如果不是,则行为未定义。

所以不:它们绝不是等价的!

于 2010-11-23T11:38:43.097 回答
54

delete []是“向量删除”,对应向量新,即new[]

您必须使用匹配的分配器对。例如malloc/free, new/delete, new[]/delete[], 否则你会得到未定义的行为。

于 2010-11-23T11:39:21.490 回答
36

不!delete[]分配时调用new[],否则调用delete

老师告诉你的会导致不确定的行为,如果幸运的话,还会导致应用程序崩溃。

于 2010-11-23T11:38:23.767 回答
11

delete用于删除单个对象,而delete[]用于删除对象数组。检查此链接以获取更多信息。

于 2010-11-23T11:37:05.990 回答