在 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++ 中您可以 write your own allocator ,因此如果您愿意,new
和 delete[]
最终可能会与之交互。如果您查看 std::allocator
是如何定义的,请注意您没有义务告诉任何人已经进行了哪些分配,也没有义务告诉任何特定分配有多大。分配器在这里有很大的自由度,规范不允许太多的询问。
关于c++ - 在 C++ 中删除数组时释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40391279/