据我所知,当我们在由相应的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/