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