删除vs删除[]

时间:2010-11-23 11:34:41

标签: c++

  

可能重复:
  ( POD )freeing memory : is delete[] equal to delete ?

当我被教授C ++时,这是很久以前的事了。我被告知从不使用deletedelete[]因为在单个对象上执行delete[]将等同于delete。我不知道是不是太信任老师了,这是真的吗?

是否有理由拨打delete而不是delete[]

我已经在SO中扫描了可能相关的问题,但没有找到任何明确的答案。

4 个答案:

答案 0 :(得分:102)

从标准(5.3.5 / 2):

  

在第一种选择中(删除   object),操作数的值   delete应该是指向a的指针   非数组对象或指向的指针   表示基础的子对象(1.8)   这类物体的一类(第10条)。   如果不是,则行为未定义。

     

在第二种选择中(删除   array),操作数的值   delete应为指针值   这是由前一个数组产生的   新的表达。 如果没有,那就是   行为未定义。

所以不是:它们绝不等同!

答案 1 :(得分:51)

delete []是“向量删除”,对应于向量new,即new[]

您必须使用匹配的分配器对。例如。 malloc/freenew/deletenew[]/delete[],否则您会得到未定义的行为。

答案 2 :(得分:35)

没有!当您使用delete[]分配时,请致电new[],否则请致电delete

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

答案 3 :(得分:11)

delete用于删除单个对象,而delete[]用于删除对象数组。请查看此link了解详情。