假設我有一類這樣我需要清空地圖的內容,在這種情況下,以避免內存泄漏
struct fooBar
{
std::map<int, std::shared_ptr<foo> > mp_items;
~fooBar()
{ /* Destructor does nothing */ }
};
在上述情況下不析構函數不得不提到mp_items.clear()
或者是它的安全沒有?`
假設我有一類這樣我需要清空地圖的內容,在這種情況下,以避免內存泄漏
struct fooBar
{
std::map<int, std::shared_ptr<foo> > mp_items;
~fooBar()
{ /* Destructor does nothing */ }
};
在上述情況下不析構函數不得不提到mp_items.clear()
或者是它的安全沒有?`
由於您的地圖包含shared_ptr,因此您不需要照顧內存管理。當你的地圖超出範圍時,它們將自動被刪除。這裏要注意了一件重要的事情是隻有當引用計數到達0
從cppreference內容將被刪除:
std::map::~map()
自毀容器。元素的析構函數被調用,並且使用的存儲被釋放。
因此,不需要撥打clear()
,因爲地圖的析構函數會爲您做。
在析構函數中必須釋放內存的唯一情況是,如果您爲數據成員分配了new
/new[]
,並希望在對象超出範圍時終止其生命。在這種情況下,您可以在析構函數中調用delete
/delete[]
。
但是,請注意,標準庫中有內存管理容器可供您使用,如std::unique_ptr
和std::shared_ptr
等等。
有[文檔在那裏](http://en.cppreference.com/w/cpp/container/map/~map)。 – juanchopanza 2014-11-02 21:59:10
順便說一句:如果可能的話,更喜歡使用'std :: unique_ptr',它們更輕量級(並且平衡性更低)。 – Deduplicator 2014-11-02 22:00:51