在c++中删除数组时释放内存
Deallocating memory while deleting an array in 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++中您可以编写自己的分配器,因此如果您愿意,new
和delete[]
可能最终会与它们交互。如果您查看std::allocator
是如何定义的,请注意您没有义务告诉任何人已经进行了什么分配,也没有义务告诉任何人任何特定的分配有多大。分配器在这里有很大的自由度,规范不允许太多的询问。
相关文章:
- 如何在c++中释放内存
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- std::unordered_map析构函数不释放内存?
- 在C++中释放内存期间,迭代器与指针有何不同
- 使用共享指针时,从共享指针本身释放内存的机制是什么
- 释放内存(主题模板)时出现问题
- 使用后自动释放内存
- C++ 如何释放内存
- 从函数内对象的向量中释放内存
- C++ 在不释放内存的情况下调用析构函数
- 多个线程之间的获取-释放内存顺序
- C++ - 析构函数只是释放内存还是实际删除对象
- 使用 RAII 替换最终块以释放内存
- 如何通过带有指向基类的指针的删除运算符释放内存
- 代码中的"sprintf"用法是否需要释放内存?
- C++何时使用 delete[] 并正确释放内存?
- 为什么此获取和释放内存围栏不能给出一致的值?
- 抛出新表达式的参数子表达式时释放内存
- 在这种情况下,如何释放内存?
- 在 c++ 中应按什么顺序释放内存?