gpt4 book ai didi

c++ - 我可以使用 `operator delete[]` 进行单个元素数组分配吗?

转载 作者:可可西里 更新时间:2023-11-01 17:04:09 25 4
gpt4 key购买 nike

如果我们如下分配一个大小为 1 的对象

int *arr = new int[1];

我们应该使用 operator delete[] 还是 operator delete 删除对象?

我担心的原因是编译器是否足够聪明将语句转换为单个元素分配 int *arr = new int 这将导致调用 operator delete[] UB.

用户案例:

我有一个指针,我最终会以多种方式分配它,但最终还是想删除它。所以想知道,对于单个元素分配,如果我一直使用 int *arr = new int[1],我能否始终如一地安全地使用 operator delete[]

注意

能否请您引用标准来支持您的回答?

最佳答案

您必须使用 delete[] 而不是 delete。不允许编译器将 new int[1] 更改为 new int

(由于 int 是 POD 类型,new intnew int[1] 很可能在覆盖,但如果是这种情况,则 delete[] on 和 int* and delete on int*也会做同样的事情。)

ISO/IEC 14882:2011 5.3.5 [expr.delete]/2:

In the first alternative (delete object), the value of the operand of delete may be a null pointer value, a pointer to a non-array object created by a previous new-expression, or a pointer to a subobject (1.8) representing a base class of such an object (Clause 10). If not, the behavior is undefined.

由于 int[1] 是一个数组对象,如果您尝试使用 delete 而不是 delete[] 删除它,行为未定义。

关于c++ - 我可以使用 `operator delete[]` 进行单个元素数组分配吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17609609/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com