2013-07-10 49 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 []應該被調用一次。希望這可以幫助。