删除vs删除
可能重复:
(POD)释放内存:是删除[]等于删除?
当我被教导C ++,这是很久以前。 我被告知从不使用delete
但delete[]
作为执行delete[]
单个对象将相当于delete
。 知道不要相信老师,我想知道,这是真的吗?
有没有理由调用delete
而不是delete[]
?
我已经扫描了可能相关的问题,但没有find明确的答案。
从标准(5.3.5 / 2):
在第一种select(删除对象)中,删除操作数的值应该是指向非数组对象的指针或指向表示这样一个对象的基类的子对象(1.8)的指针(第10节)。 如果不是,则行为是不确定的。
在第二种select(删除数组)中,delete的操作数的值应该是前一个数组new-expression产生的指针值。 如果不是,则行为是不确定的。
所以不,他们绝不相同!
delete []
是“vector删除”,对应于vectornew,即new[]
。
您必须使用匹配的分配器对。 例如malloc/free
, new/delete
, new[]/delete[]
,否则你会得到未定义的行为。
没有! 你用new[]
分配时调用delete[]
,否则调用delete
。
老师告诉你什么导致了未定义的行为,如果你幸运的话,应用程序崩溃。
delete
用于删除单个对象,而delete[]
用于删除一个对象数组。 检查此链接了解更多信息。