删除标准库映射

Delete a standard library map

本文关键字:映射 标准 删除      更新时间:2023-10-16

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

您必须首先删除所有动态分配的元素,否则可能会泄漏内存。

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 

不,您需要显式地遍历这些值并对它们进行delete

最好的解决方案是用map<long,std::shared_ptr<myClass> >代替。