在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;
}
答案 0 :(得分:12)
new
运算符最终在堆上创建一个条目,堆分配器知道如何解除它先前分配的内容。这些信息通常不会用于您的代码,因为它是您不应该捣乱的所有C ++内部。
所以基本上堆元数据描述了这种分配。
请记住,在C ++中,您可以write your own allocator,因此如果您愿意,new
和delete[]
可能最终会与您联系。如果您查看std::allocator
的定义方式,请注意您没有义务告诉任何人已经进行了哪些分配,以及任何特定分配的大小。分配器在这里有很大的自由度,规范也不允许进行大量的审讯。