可能重复:
delete[]等于删除吗?
当我学C++时,那已经是很久以前的事了。有人告诉我永远不要使用
delete
,但使用 delete[]
,因为在单个对象上执行 delete[]
相当于 delete
。知道不要太相信老师我想知道,这是真的吗?
有没有理由打电话给
delete
而不是delete[]
?
我已经扫描了SO中可能相关的问题,但没有找到任何明确的答案。
来自标准(5.3.5/2):
在第一种选择中(删除 对象),操作数的值 删除应是一个指向 非数组对象或指向 代表基础的子对象 (1.8) 此类对象的类(第 10 条)。 如果不是,则行为未定义。
在第二种选择中(删除 数组),操作数的值 删除应为指针值 这是由先前的数组产生的 新表达。 如果没有,则 行为未定义。
所以不:它们绝不等同!
delete []
是“向量删除”,对应向量新,即new[]
。
您必须使用匹配的分配器对。例如。
malloc/free
、new/delete
、new[]/delete[]
,否则你会得到未定义的行为。
不!当您使用
delete[]
进行分配时,您会调用 new[]
,否则您会调用 delete
。
老师告诉你的内容会导致未定义的行为,如果幸运的话,还会导致应用程序崩溃。