可能重复:
(POD)释放内存:删除[]是否等于删除?
当我被教授C++时,这是很久以前的事了.我被告知从不使用,delete但delete[]因为delete[]在单个对象上执行将相当于delete.我不知道是不是太信任老师了,这是真的吗?
有没有理由打电话delete而不是delete[]?
我已经在SO中扫描了可能相关的问题,但没有找到任何明确的答案.
ice*_*ime 108
从标准(5.3.5/2):
在第一个替代(删除对象)中,delete的操作数的值应该是指向非数组对象的指针或指向表示这种对象的基类的子对象(1.8)的指针(第10节). 如果不是,则行为未定义.
在第二种方法(删除数组)中,delete的操作数的值应该是由前一个数组new-expression产生的指针值.如果不是,则行为未定义.
所以没有:它们绝不等同!
Ale*_*ski 52
delete []是"矢量删除"并对应于矢量new,即new[].
您必须使用匹配的分配器对.例如malloc/free,new/delete,new[]/delete[],否则,你得到了一个未定义的行为.