删除vs删除[]

one*_*sse 96 c++

可能重复:
(POD)释放内存:删除[]是否等于删除?

当我被教授C++时,这是很久以前的事了.我被告知从不使用,deletedelete[]因为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[],否则,你得到了一个未定义的行为.

  • 响应中的"vector"一词应该改为"native C-style array"?否则它或许有点混乱. (12认同)
  • 不,向量和标量新/删除是很好理解的术语。 (2认同)

Sim*_*one 36

没有!你delete[]分配时打电话new[],否则你打电话delete.

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


jmp*_*pcm 11

delete用于删除单个对象,同时delete[]用于删除对象数组.请查看此链接以获取更多信息.