2016-10-10 104 views
0

我有一個我不需要的指針列表。要刪除所有的人,我可以正常循環列表:刪除一個std :: list的內容

for (T* ptr: mylist) { 
    delete ptr; 
} 

,或者直到列表爲空我可以刪除第一個或最後一個元素:

while (!mylist.empty()) { 
    delete mylist.front(); //or mylist.back() 
    mylist.pop_front(); //or mylist.pop_back() 
} 

什麼是首選的方式,既爲性能和清晰度?

回答

4

最好的方法是將std::unique_ptr's存儲在列表中,而不是自己管理內存。那麼你只需要做mylist.clear()

+0

'std :: list :: clear'對我來說是全新的。好的建議然而。 – user6245072

+0

請注意,'clear'將從列表中刪除所有元素。刪除後的智能指針也將釋放他們擁有的內存。但通常的指針不會。所以這種方法只適用於智能指針。無論如何,現在手動刪除對象被認爲是不好的做法,因爲它太容易出錯。 –

+0

很高興知道最後一點。謝謝你的一切。 – user6245072

1

他們做了兩件不同的事情。第二個留給你一個空的列表。第一個問題留給你一個包含一堆無效指針的列表;這可能也可能不重要,這取決於該操作之後列表發生了什麼。

1

我會用你的第一個例子。爲了最佳實踐,你應該清除你的列表,以確保沒有無效指針。

for (T* ptr : mylist) delete ptr; 
mylist.clear();