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

时间:2016-11-02 23:06:43

标签: c++

在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;
}

1 个答案:

答案 0 :(得分:12)

new运算符最终在堆上创建一个条目,堆分配器知道如何解除它先前分配的内容。这些信息通常不会用于您的代码,因为它是您不应该捣乱的所有C ++内部。

所以基本上堆元数据描述了这种分配。

请记住,在C ++中,您可以write your own allocator,因此如果您愿意,newdelete[]可能最终会与您联系。如果您查看std::allocator的定义方式,请注意您没有义务告诉任何人已经进行了哪些分配,以及任何特定分配的大小。分配器在这里有很大的自由度,规范也不允许进行大量的审讯。