为包含C++对象数组的对象数组释放内存的正确方法

correct way to free up memory for an array of Objects containing an array of Objects in C++

本文关键字:数组 对象 方法 内存 释放 包含 C++      更新时间:2023-10-16

我有这样的东西:

class HashTable
{  
  Bucket<E>** index;
  ...
}
 ~HashTable( ) 
 {
     delete[] index;
 }
 class Bucket
 {
    E* elements
    ...
 }
 ~Bucket( ) 
 {
     delete[] elements;
 }

在这种情况下,如何正确释放内存?

删除[] 索引是否足够,还是我必须循环遍历所有存储桶对象并单独删除 elemtents-array?

如果您使用 new 单独分配每个存储桶对象,

则应使用 delete 解除分配每个存储桶对象。
简单的规则是:
您应该分别拥有尽可能多的deletedelete[] newnew[]

建议:
您可以通过使用智能指针并使自己免于此类内存管理问题来帮自己一个忙。

哈希表包含一个双数组(我想),所以必须像这样删除它:

delete[] index[0];
delete[] index[1];
...
delete[] index;

如果这些级别中的任何一个不是数组,而是单指针,则省略[]

Bucket类,正如你写的那样,很好,它会自动删除它的数组和其中的E