1

我有这样的事情:

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

 ~HashTable( ) 
 {
     delete[] index;
 }

 class Bucket
 {
    E* elements
    ...
 }

 ~Bucket( ) 
 {
     delete[] elements;
 }

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

delete[] 索引是否足够,还是我必须循环遍历所有 Bucket-Objects 并单独删除 elemtents-array?

4

2 回答 2

2

如果您使用 单独分配每个存储桶对象new,则应使用delete.
简单的规则是:
您应该分别拥有尽可能多的数量或delete数量。delete[]newnew[]

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

于 2012-04-19T14:30:52.480 回答
0

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

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

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

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

于 2012-04-19T14:34:45.180 回答