当我被教授C ++时,这是很久以前的事了。我被告知从不使用delete
但delete[]
因为在单个对象上执行delete[]
将等同于delete
。我不知道是不是太信任老师了,这是真的吗?
是否有理由拨打delete
而不是delete[]
?
我已经在SO中扫描了可能相关的问题,但没有找到任何明确的答案。
答案 0 :(得分:102)
从标准(5.3.5 / 2):
在第一种选择中(删除 object),操作数的值 delete应该是指向a的指针 非数组对象或指向的指针 表示基础的子对象(1.8) 这类物体的一类(第10条)。 如果不是,则行为未定义。
在第二种选择中(删除 array),操作数的值 delete应为指针值 这是由前一个数组产生的 新的表达。 如果没有,那就是 行为未定义。
所以不是:它们绝不等同!
答案 1 :(得分:51)
delete []
是“向量删除”,对应于向量new,即new[]
。
您必须使用匹配的分配器对。例如。 malloc/free
,new/delete
,new[]/delete[]
,否则您会得到未定义的行为。
答案 2 :(得分:35)
没有!当您使用delete[]
分配时,请致电new[]
,否则请致电delete
。
老师告诉你的是未定义的行为,如果幸运的话,会导致应用程序崩溃。
答案 3 :(得分:11)
delete
用于删除单个对象,而delete[]
用于删除对象数组。请查看此link了解详情。