删除标准库地图

时间:2013-01-06 10:23:05

标签: c++ dictionary std

我有map<long,myClass *> myMap; myMap的元素是动态分配的: myMap[1] = new myClass();等 我想删除为myMap元素分配的所有内存。 是否可以使用myMap.erase(myMap.begin(),myMap.end());

2 个答案:

答案 0 :(得分:4)

不,您需要显式迭代值并delete

但最好的解决方案是改为使用map<long,std::shared_ptr<myClass> >

答案 1 :(得分: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