为包含C++对象数组的对象数组释放内存的正确方法
correct way to free up memory for an array of Objects containing an array of Objects in C++
我有这样的东西:
class HashTable
{
Bucket<E>** index;
...
}
~HashTable( )
{
delete[] index;
}
class Bucket
{
E* elements
...
}
~Bucket( )
{
delete[] elements;
}
在这种情况下,如何正确释放内存?
删除[] 索引是否足够,还是我必须循环遍历所有存储桶对象并单独删除 elemtents-array?
如果您使用
new
单独分配每个存储桶对象,则应使用 delete
解除分配每个存储桶对象。
简单的规则是:
您应该分别拥有尽可能多的delete
或delete[]
new
或new[]
。
建议:
您可以通过使用智能指针并使自己免于此类内存管理问题来帮自己一个忙。
哈希表包含一个双数组(我想),所以必须像这样删除它:
delete[] index[0];
delete[] index[1];
...
delete[] index;
如果这些级别中的任何一个不是数组,而是单指针,则省略[]
。
Bucket
类,正如你写的那样,很好,它会自动删除它的数组和其中的E
。
相关文章:
- 销毁C++中动态分配的内存(数组对象)
- 数组对象的生存期是否在重用其元素存储时结束?
- 为什么顶点数组对象会导致错误?
- 具有纯虚函数和指针数组对象类型的父类的指针数组
- 这是使用构造函数初始化数组对象的最佳方法吗?
- OpenGL 顶点数组对象与 tinyobjloader
- 将数组/对象/结构列表从C#库中传递给C MFC应用程序
- C++ RapidJson 帮助反序列化数组对象
- ptrdiff_t可以表示指向同一数组对象元素的指针的所有减法吗?
- 检查成员函数是否返回临时对象或数组对象
- 为什么 std::variant 不能容纳数组对象类型,而联合可以?
- 当数组对象以函数参数传递时,为什么复制构造函数会自称
- 如何使用箭头指针打印出一类数组对象,这些对象中有多个分数
- C++17 std::shared_ptr<> 类数组对象的重载运算符 []
- 添加两个具有运算符重载的数组对象,从而导致分段错误
- opengl:两个不同的矢量可以绑定到同一个顶点数组对象吗
- 使用相同的数据填充数组对象或使用指针
- 方法用于最快的分配,并且不需要将动态大小的数组对象作为局部变量
- 如何将2d数组对象传递给c++中的函数
- ReferenceTable溢出(jni-android),数组对象释放