在c++中删除数组时释放内存

Deallocating memory while deleting an array in C++

本文关键字:释放 内存 数组 删除 c++      更新时间:2023-10-16

在c++中,当我们赋值一个数组时,一旦数组被初始化,就没有办法知道数组的大小。那么,当我试图在程序结束时释放内存时,删除操作符如何知道要删除的内存量呢?

int main()
{
    int* p = new int[10];
    int* q = new int[30];
    //... bunch of code
    //...
    // ... bunch of code
    delete[] p;
    delete[] q;
    return 0;
}

new操作符最终在堆上创建了一个条目,堆分配器知道如何取消分配它以前分配的东西。这些信息通常对你的代码是不可用的,因为它们都是c++内部的,你不应该乱动。

基本上堆元数据描述了这个分配。

请记住,在c++中您可以编写自己的分配器,因此如果您愿意,newdelete[]可能最终会与它们交互。如果您查看std::allocator是如何定义的,请注意您没有义务告诉任何人已经进行了什么分配,也没有义务告诉任何人任何特定的分配有多大。分配器在这里有很大的自由度,规范不允许太多的询问。