1

重複の可能性:
std :: vector.clear()は各要素の削除(メモリの解放)を行いますか?

2番目の要素がヒープに割り当てられているマップがあります。

delete反復中に明示的に呼び出しますか、それともメソッドerase()clear()実行してそれを実行しますか?

これが割り当てられた2番目の要素を消去する私のデストラクタですnew

        ~Event()
        {
            auto iter = mapper.begin();
            while (iter != mapper.end())
            {                   
                mapper.erase(iter++); // heap object
            }
        }
4

2 に答える 2

3

deletenew要素を明示的に呼び出す必要があります。
標準ライブラリコンテナは、ポインタに割り当てられた動的メモリの所有権を取得しません。

自動クリーンアップが必要な場合は、コンテナ要素としてスマートポインタを使用する必要があります。

于 2012-05-01T11:00:44.367 に答える
2

いいえ、ありません。自分自身を呼び出す必要がありdeleteます(またはスマートポインターを使用する必要があります)。

于 2012-05-01T11:00:32.687 に答える