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

标签 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;
}

最佳答案

new 运算符最终会在堆上创建一个条目,并且堆分配器知道如何取消分配之前分配的内容。这些信息通常对您的代码不可用,因为它们都是您不应该乱用的 C++ 内部结构。

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

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

关于c++ - 在 C++ 中删除数组时释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40391279/

相关文章:

c++ - 如何在保留任何以前的格式的同时将文本插入 Win32 中的 Rich Edit 控件

c++ - 视锥体和透视矩阵

c++ - 为什么这个对象被认为是右值?

C++ 如何在应用程序的 DLL 之间进行通信?

c++ - 在没有 clang 警告的情况下在 C++11 中非平凡地初始化模板类的静态成员

c++ - 将给定的 vararg 参数传递给另一个函数的合适方法是什么?

C++ 构造函数中不需要的隐式转换

c++ - 使用套接字,发出通信结束信号的最佳做法是什么?

C++ 避免调用抽象基类的构造函数

c++ - 使用 C++ 正则表达式库中的 regex_search