私の仲間が私に言った、私はこのコードでメモリリークがあります
Base
{
public:
vector<Foo*> fooes;
};
Derived : public Base
{
public:
Derived ( )
{
for ( int i = 0 ; i < 10 ; i++ )
{
this.fooes.push_back ( new Foo() );
}
};
};
しかし、彼はとても忙しい人で、私を助けることができないので、私はあなたに尋ねます、メモリリークはどこにありますか?そして、どうすれば修正できますか?私が理解しているように、メモリリークは、によって作成されたオブジェクトを削除しないことですnew Foo()
。したがって、にデストラクタを追加し、ベクトルBase
をクリアするだけですよね?fooes
Base
{
public:
vector<Foo*> fooes;
~Base ( )
{
this->fooes.clear();
};
};
質問は:
これは正しいメモリリーク修正ですか?
のデストラクタ
Base
は、派生のデストラクタの前に呼び出されますか?fooes
削除中にバーターは自動的に削除されますか、Base
それともクラスのすべてのメンバーを手動で削除する必要がありますか?