次のコード:
~A()
{
for (itr = mymap.begin(); itr != mymap.end() ++itr)
{
delete itr->second //the map look like this <std::string , T*>
}
}
A::Addnew(std::string name)
{
return mymap.insert(std::pair<std::string,T*>(name, new T)).second;
}
メモリリークが発生しますが、AddNew()
メンバー関数を次のように変更すると:
itr = mymap.find(name);
if(itr == mymap.end())
{
return mymap.insert(std::pair<std::string,T*>(name, new T)).second;
}
メモリリークはありません。
最初のケースを誤って呼び出してしまったら、新しい T をたくさん紹介するようですが、mymap.size()
追跡できません。誰でもこれを説明できますか?