0

簡単な質問のようですが、私は疑問です。演算子で作成された空でないリストを呼び出すと、演算子はすべてdeleteの要素を破棄しますか?確かにそうなりますが、確認が必要です。ご覧のとおり、コンストラクターはありますが、ディストリビューターはありません。 Objectdelete list newObject

コード:

std::list<Object>* ptr_listObjects = new std::list<Object>();
OtherObject* ptr_null = NULL;
ptr_listObjects->push_back ( Object( ptr_null, 'A') );
ptr_listObjects->push_back ( Object( ptr_null, 'A') );
ptr_listObjects->push_back ( Object( ptr_null, 'A') );
ptr_listObjects->push_back ( Object( ptr_null, 'A') );
ptr_listObjects->push_back ( Object( ptr_null, 'A') );
ptr_listObjects->push_back ( Object( ptr_null, 'A') );
delete ptr_listObjects; // no any possible memory leaks? (Object does not use `new` operator)


class Object
{
public:
    Object( OtherObject* ptr_other, char xxx):
    ptr_OtherObject(ptr_other),
    charflag(xxx)
    {}


    OtherObject* ptr_OtherObject;
    char charflag;
};
4

1 に答える 1

6

std::listデストラクタが実行され、その要素のデストラクタも実行されます。とはいえ、そもそもなぜコンテナを動的に割り当てるのですか?コンテナがメモリを管理できないようにしています。その仕事をさせてください。自動保存期間でリストを割り当てます。

余談ですObject 、デストラクタがありますが、コンパイラは空のデストラクタを生成します。ただし、クリーンアップするものはないため、何も実行されません。また、クラスデザインから、インスタンスがObjectコンストラクターで取るポインターを所有していないことは明らかです。したがって、デザインを大幅に変更しない限り、ポインターの割り当てを解除しないでください。

于 2012-12-19T18:20:59.257 に答える