2014-06-12 74 views
1

我有一個指向其他「對象」的類的向量。如何刪除傳播或檢測到的對象?

有什麼辦法,之後/當這些對象之一被刪除,以刪除任何指針,可能已經指向它從矢量?

最好的辦法是以某種方式傳播刪除,但只要知道一個對象被遍歷的時候就知道對象已被刪除也是可以的。

+1

看看智能指針[std :: shared_ptr](http://en.cppreference.com/w/cpp/memory/shared_ptr)和[std :: unique_ptr](http://en.cppreference.com/ w/cpp/memory/unique_ptr) – jsantander

+0

智能指針也許? – MultiVAC

回答

1

不要使用香草指針。改爲使用類別std::shared_ptrstd::weak_ptr

這些類實現自動內存管理。如果不再需要對象,則不會刪除該對象,而是刪除引用該對象的所有shared_ptr。只有當對象不存在shared_ptr時,實際的對象纔會被刪除。

任何仍然存在的weak_ptr將返回一個對象,將評估爲false。當發生這種情況時,您知道可以從矢量中刪除weak_ptr

1

這就是爲什麼std::weak_ptr存在。它不會停止刪除,但它確實檢測到它。