删除与删除 [] [重复]

Posted

技术标签:

【中文标题】删除与删除 [] [重复]【英文标题】:delete vs delete[] [duplicate] 【发布时间】:2011-05-14 10:12:38 【问题描述】:

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

当我学习 C++ 时,这是很久以前的事了。我被告知永远不要使用delete,但delete[] 在单个对象上执行delete[] 将等效于delete。知道不要太相信老师,我想知道,这是真的吗?

有没有理由打电话给delete 而不是delete[]

我浏览了 SO 中可能相关的问题,但没有找到任何明确的答案。

【问题讨论】:

/me 有点呕吐。他们是否建议您也总是调用 new[1]? 当他们说“从不”时不要相信他们。所有强有力的陈述都是错误的。 实际上在少数情况下您需要在 C++ 中使用delete[]。最好使用std::vectorboost::array @Kirill “所有强有力的陈述都是错误的。”这种说法自相矛盾。 我很确定那是他的玩笑。 【参考方案1】:

来自标准(5.3.5/2):

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

在第二种选择中(删除 数组),操作数的值 delete 应该是指针值 这是由先前的数组产生的 新表达。 如果不是,则 行为未定义。

所以不:它们绝不是等价的!​​p>

【讨论】:

【参考方案2】:

delete []是“vector delete”,对应vector new,即new[]

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

【讨论】:

响应中的“vector”一词应该改为“native C-style array”?否则可能会有点混乱。 不,向量和标量 new/delete 是很好理解的术语。【参考方案3】:

不!分配时调用delete[]new[],否则调用delete

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

【讨论】:

【参考方案4】:

delete 用于删除单个对象,而delete[] 用于删除对象数组。查看此link 了解更多信息。

【讨论】:

以上是关于删除与删除 [] [重复]的主要内容,如果未能解决你的问题,请参考以下文章

何时使用重复数据删除技术?

前端与算法 leetcode 26. 删除排序数组中的重复项

删除与用户名相关的行 [重复]

oracle删除重复的行怎么删啊

oracle删除重复的行怎么删啊

mysql / sqlserver中截断与删除的比较[重复]