gpt4 book ai didi

c++ - new 和 new[1] 有什么区别?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:03:08 24 4
gpt4 key购买 nike

newnew[1] 有什么区别?我可以将 deletenew[1] 一起使用吗?

编辑

好吧好吧,我应该提供背景,抱歉。我正在使用 VS 2010 评估 BoundsChecker,当我在 new[1] 上使用 delete[] 时,它提示内存泄漏。所以理论上我知道应该如何使用 new 和 delete 对,但这种特殊情况让我对幕后的事情感到困惑。知道发生了什么事吗?

最佳答案

Ed 和 aix 是对的,但幕后还有很多事情要做。

如果您使用 new,然后 delete,则 delete 调用将执行一个析构函数。

如果使用new[],就必须使用delete[],但是delete[]怎么知道要调用多少析构函数呢?可能有 2 个实例的数组,或 2000 个实例中的一个?某些(可能是大多数或所有)编译器所做的是在它返回给您的内存之前存储实例数。

所以如果你调用 new[5],那么 new 会像这样分配内存:

+---+-----------+-----------+-----------+-----------+-----------+
| 5 | instance1 | instance2 | instance3 | instance4 | instance5 |
+---+-----------+-----------+-----------+-----------+-----------+

然后你得到一个指向 instance1 的指针。

如果您稍后调用 delete[],delete[] 将使用数字(在本例中为 5)来查看在释放内存之前需要调用多少析构函数。

请注意,如果您将 new 与 delete[] 混合使用,或者将 new[] 与 delete 混合使用,它可能会出错,因为数字可能会丢失,或者数字可能不正确。

如果将 new[1] 与 delete 混合使用,你可能只是运气好,但不要依赖它。

关于c++ - new 和 new[1] 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7510603/

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