delete []在调用析构函数后是否一次取消分配内存?

Ric*_*ich 6 c++ memory-management

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

我所问的是是否delete[]会回收整个内存,通过分配的new[]表达,在一个镜头,因为该信息(总内存量),可之后的所有元素被破坏,还是会陆续解除分配由数组元素所占用的内存它已经调用了析构函数?

问一个相关的后续问题删除(非数组形式)是否知道新的或新的[]分配的内存总量

zwo*_*wol 2

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

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