2012-12-20 36 views
1

刪除指針我有地圖在C++地圖

std::map<std::string, my_class*> name2ptr; 

我試圖通過地圖第一遍歷刪除的my_class指針和後來清除地圖刪除地圖中的內容。現在,當地圖中只有一對時,我遇到了問題。該地圖現在只有一個條目

<"ajay", 0xabcd> 

它在刪除((* itr).second)時崩潰。 for循環如下。

name_map_type::iterator itr; 
    for(itr= name2ptr.begin();itr!=name2ptr.end();itr++){ 
     if((*itr).second){ 
      delete ((*itr).second); 
     } 
    } 
name2ptr.clear(); 

我該如何解決這個問題?

+3

它在那裏崩潰,但問題在別的地方。 –

+0

您發佈的代碼沒有任何問題。這個錯誤幾乎肯定是你的代碼中的其他地方。 – templatetypedef

+1

my_class的析構函數是什麼樣的? –

回答

2

您是否在地圖中放置了不良指針?首先,不需要檢查(*itr).second上的nullptr; delete ing nullptr完全沒問題,它什麼都不會做。

你應該看看存儲std::shared_ptr<my_class>作爲你的地圖的值類型而不是原始指針。這樣,您只需撥打name2ptr.clear(),並且只要沒有其他人持有對該對象的引用,它就會被刪除。

結賬this reference