1

次のコード:

  ~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()追跡できません。誰でもこれを説明できますか?

4

2 に答える 2