0

myMapmap<long,myClass *> 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 に答える