2013-07-10 52 views
0

比方说,我有结构如何删除内存?

struct Foo { 
    int whatever; 
    int whatever2; 
    ... 
}; 

而且我有这种类型的数组

Foo **array = new Foo*[128]; 

然后,每个指针我给你新的结构

for (int i = 0; i < 128; i++) 
    array[i] = new Foo; 

然后,过了一段时间我释放:

delete[] array; 

内存将如何释放?

  1. 只为指针的空间将被释放
  2. 空间指针+通过这些指针本身所指向的对象?
+7

它是#1。只需使用'std :: vector '。 –

+6

对于每个'new []',你都需要'delete []'。对于每个“新”,你需要一个“删除”。 – juanchopanza

回答

3

您的代码泄漏内存。您需要每拨打一次new拨打电话delete一次(假设new不会失败并返回NULL或丢弃bad_alloc)。所以,在这种情况下,你需要有一个类似的循环,以调用array[i] = new Foo;delete array[i];

0

我认为这是斯科特迈耶斯书中的一点,Effective C++已经阅读了很久。但基本的想法是,当你使用new时避免内存泄漏。确保在调用新函数时多次调用delete,并相应地使用delete []映射新的delete和new []。所以在你的情况下,new在for循环中被称为128次,而new []被调用一次,所以同样的删除应该被称为与array [i]相同的方式128次,delete []应该被调用一次。希望这可以帮助。