0

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

4

2 回答 2

4

不,您需要显式地遍历这些值和delete它们。

最好的解决方案是map<long,std::shared_ptr<myClass> >改用一个。

于 2013-01-06T10:24:11.660 回答
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 
于 2013-01-06T10:24:26.010 回答