gpt4 book ai didi

c++ - delete[] 是否在调用析构函数后一次性释放内存?

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

据我所知,当我们在由相应的new []创建的指针上写入delete []时,程序将在数组中查找记帐信息并找出数组的元素大小(一个计数器)。然后程序对它们中的每一个调用元素的析构函数。最后,内存(什么内存??)由名为 operator delete 的函数释放。

我想问的是 delete[] 是否会在 一次 中释放由 new[] 表达式分配的整个内存因为该信息(总内存量)在所有元素都被销毁后可用,还是它会成功释放调用析构函数的数组元素占用的内存?

相关后续问题被问到Does delete (non array form) know the total amount of memory allocated by either new or new[]

最佳答案

所有内存将立即释放给底层分配器。这是 C++ 标准强制要求的,尽管不是特别明确。 N3337是最接近在线免费提供的官方 C++11 标准的近似值。查看第 5.3.5 节 [expr.delete],它详细说明了 delete[] 调用扩展到的代码。特别是,operator delete[] 在第 7 步被调用一次 为数组的所有元素调用析构函数之后(第 6 步) .

您还可以从 18.6.1.2 [new.delete.array] 中关于哪些指针有效传递给 operator delete[] 的措辞中推断出此行为:“... 应该是先前调用 operator new[] 返回的值(...注意事项...)”。由于 operator new[] 返回一个指向整个数组的指针,因此 operator delete[] 也必须对整个数组调用一次。

关于c++ - delete[] 是否在调用析构函数后一次性释放内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32507684/

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