删除与删除[] [重复]

问题描述 投票:0回答:4

可能重复:
delete[]等于删除吗?

当我学C++时,那已经是很久以前的事了。有人告诉我永远不要使用

delete
,但使用
delete[]
,因为在单个对象上执行
delete[]
相当于
delete
。知道不要太相信老师我想知道,这是真的吗?

有没有理由打电话给

delete
而不是
delete[]

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

c++ memory-management delete-operator
4个回答
117
投票

来自标准(5.3.5/2):

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

在第二种选择中(删除 数组),操作数的值 删除应为指针值 这是由先前的数组产生的 新表达。 如果没有,则 行为未定义。

所以不:它们绝不等同!


54
投票

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

您必须使用匹配的分配器对。例如。

malloc/free
new/delete
new[]/delete[]
,否则你会得到未定义的行为。


36
投票

不!当您使用

delete[]
进行分配时,您会调用
new[]
,否则您会调用
delete

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


11
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.