質問

このコードを見る:

class test
{
    public:
        test() { cout << "Constructor" << endl; };
        virtual ~test() { cout << "Destructor" << endl; };
};

int main(int argc, char* argv[])
{
    test* t = new test();
    delete(t);
    list<test*> l;
    l.push_back(DNEW test());
    cout << l.size() << endl;
    l.clear();
    cout << l.size() << endl;
}
.

その後、この出力を見てください。

    Constructor
    Destructor
    Contructor
    1
    0
.

質問は次のとおりです。

役に立ちましたか?

解決

あなたのリストはポインターです。ポインタはデストラクタを持っていません。デストラクタを呼び出す必要がある場合は、代わりにlist<test>を試してください。

他のヒント

deleteを使用しているポインタを解放するための代替手下け、またはそれを抽象化するもの(スマートポインタやポインタコンテナなど)を使用することは、単にスタック上のオブジェクトを直接作成することです。

test t;を介してtest * t = new test();を好み、リソース、スマート、またはそうでなければその他の方法を所有するポインタに対処したいことはごくめったにありません。

要素へのポインタではなく、「実際の」要素のstd::listを使用する場合は、この問題がありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top