2014-11-02 93 views
-1

假設我有一類這樣我需要清空地圖的內容,在這種情況下,以避免內存泄漏

struct fooBar 
{ 
    std::map<int, std::shared_ptr<foo> > mp_items; 
    ~fooBar() 
    { /* Destructor does nothing */ } 
}; 

在上述情況下不析構函數不得不提到mp_items.clear() 或者是它的安全沒有?`

+1

有[文檔在那裏](http://en.cppreference.com/w/cpp/container/map/~map)。 – juanchopanza 2014-11-02 21:59:10

+0

順便說一句:如果可能的話,更喜歡使用'std :: unique_ptr',它們更輕量級(並且平衡性更低)。 – Deduplicator 2014-11-02 22:00:51

回答

1

由於您的地圖包含shared_ptr,因此您不需要照顧內存管理。當你的地圖超出範圍時,它們將自動被刪除。這裏要注意了一件重要的事情是隻有當引用計數到達0

2

cppreference內容將被刪除:

std::map::~map() 

自毀容器。元素的析構函數被調用,並且使用的存儲被釋放。

因此,不需要撥打clear(),因爲地圖的析構函數會爲您做。

在析構函數中必須釋放內存的唯一情況是,如果您爲數據成員分配了new/new[],並希望在對象超出範圍時終止其生命。在這種情況下,您可以在析構函數中調用delete/delete[]

但是,請注意,標準庫中有內存管理容器可供您使用,如std::unique_ptrstd::shared_ptr等等。