2012-09-25 101 views
1

我有一個指向對象的指針列表。內存泄漏到指向對象的指針列表

std::list<X*> xList; 

所有我需要的是列表的大小,所以我的方法,填充此列表並調用size(),然後返回大小。

注意:我知道這不是最好的解決方案,但我使用的是一個提供動態分配對象列表的API,這是我能做到的唯一方法。

現在valgrind說這裏有內存泄漏。我假設這是因爲我從不刪除列表中的對象。

我想我會做到這一點:

std::list<X*>::iterator iter; 
for (iter = xList.begin(); iter != xList.end(); ++iter) 
{ 
    delete (*iter); 
} 

但這是對此最好的解決方案?

+0

使用智能指針會是更好的解決方案。 – hmjd

+0

我認爲你不能以這種方式刪除元素(而迭代使用該迭代器)。 – dbrank0

+0

@ dbrank0:刪除迭代器引用的對象非常好。 –

回答

6

不,最好的解決辦法是改爲使用std::list<std::unique_ptr<X>>。現在這些對象會在適當的時候自行刪除,而且你不必關心它。當std::list被銷燬時,它所擁有的X對象也被銷燬。

2

但是這是最好的解決方案嗎?

不,最好的解決辦法是改爲std::list<std::shared_ptr<X> >

+0

謝謝你的快速回復。你能否詳細說明一下? – Kam

+0

@Kam你知道智能指針是什麼嗎? '的std :: shared_ptr'?看看它。它爲動態分配的對象提供自動內存管理。 –

+1

對不起,我明白了,我想知道爲什麼你選擇了專門用於這個問題的shared_ptr。謝謝。 – Kam