2013-01-06 61 views
0

我有MYMAP的map<long,myClass *> myMap; 元素進行動態分配: myMap[1] = new myClass();等 我想刪除所有的記憶,這是分配給myMap元素。 它可以使用myMap.erase(myMap.begin(),myMap.end());刪除一個標準庫圖

+0

簡單的解決方法:使用智能指針。 – chris

回答

4

您必須首先刪除所有這些動態分配的元素,否則可能會泄漏內存。

for (std::map<long,myClass *>::iterator iter = myMap.begin(); 
    iter != myMap.end(); ++iter) 
{ 
    delete (*iter).second; 
} 

myMap.clear(); 

一個更好的辦法是使用,而不是智能指針:

std::map<long, std::shared_ptr<myClass> > myMap; 
std::shared_ptr<myClass> p(new myClass()); 
myMap[1] = p; 
myMap.clear(); // no need to call delete manually anymore, clear is enough 
4

不,你需要明確地遍歷值和delete他們。

但最好的解決辦法是改爲使用map<long,std::shared_ptr<myClass> >