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

时间:2012-04-19 14:29:21

标签: c++ memory free

我有这样的事情:

class HashTable
{  
  Bucket<E>** index;
  ...
}

 ~HashTable( ) 
 {
     delete[] index;
 }

 class Bucket
 {
    E* elements
    ...
 }

 ~Bucket( ) 
 {
     delete[] elements;
 }

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

删除[]索引是否足够,或者我是否需要循环遍历所有Bucket-Objects并单独删除elemtents-array?

2 个答案:

答案 0 :(得分:2)

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

建议:
你可以通过使用智能指针帮助自己解决这些内存管理问题。

答案 1 :(得分:0)

HashTable包含一个双数组(我猜),因此必须删除它:

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

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

Bucket类正如您所写,很好,它会自动删除其数组及其中的E