C ++ STD :: List :: Clear()はどのようなものですか?
-
11-12-2019 - |
質問
このコードを見る:
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
を使用する場合は、この問題がありません。
所属していません StackOverflow