2013-05-21 99 views
1

我已經爲學習目的創建了自己的雙鏈表實現。我正在做一些測試以確保內存正確解除分配。在main.cpp,我有以下幾點:內存釋放雙向鏈表C++

list<int> pointer; 
int *x = new int(1); 
int *y = new int(2); 
int *z = new int(3); 
pointer.insertBack(*x); 
pointer.insertBack(*y); 
pointer.insertBack(*z); 
pointer.printForward(); 
pointer.printReverse(); 

顯然內存正在因爲調用new的分配。在所有這些代碼之後,我是否必須調用delete自己,或者列表的析構函數是否應該處理內存釋放?如果我使用int而不是指針,則不會發現內存泄漏。我正在使用valgrind來檢查內存泄漏。

+0

不是valgrind告訴你嗎? – chris

+1

該列表永遠不會看到您的指針,因爲您仍然將整數(例如insertBack(* x))傳遞給insertBack()而不是指針(例如,insertBack(x),它不會編譯,除非您使用列表比列表)。所以列表對象絕對不會刪除你分配的內存。 –

回答

2

如果您在列表中存儲指向數據的指針,則必須自己刪除該數據,列表將不會(或不應該)爲您執行。
最好的辦法是獲取數據,使用它,然後在相同的函數中刪除它。

也取決於您的鏈接列表實現,您可能必須在內部刪除列表中每個節點正在使用的內存。

如果您正在討論刪除列表,如果您不需要數據,則應在刪除列表之前將其刪除。

+0

謝謝。這回答了我的問題。 – OGH