クラスプロジェクトのコードを書いています。タスクの 1 つは、作成したクラスへのポインターのコレクションを削除することです。解決策は次のようになります。
CDocument::~CDocument()
{
for(std::list<CActor*>::iterator it = mActors.begin(); it != mActors.end(); it++)
{
delete *it;
}
mActors.clear();
}
私の解決策は次のようになりました:
CDocument::~CDocument()
{
for(std::list<CActor*>::iterator it = mActors.begin(); it != mActors.end(); it++)
{
delete **it;
}
}
私の混乱は、イテレータの逆参照から生じています。リストから CActor オブジェクトを削除したいと考えています。この場合、反復子はポインターへのポインターを提供します。メモリ内の実際のオブジェクト **it ではなく、CActor ポインター *it を削除する必要があるのはなぜですか? また、追加の mActors.clear() はなぜですか?