ルック:C++ std :: list :: clear()がデストラクタを呼び出さないのはなぜですか?このコードでは
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
質問は:なぜl.clear()
でリスト要素のデストラクタと呼ばれていませんか?
ニース、それは私が思ったものですが、私はそれを確認したかったのです。 – danikaze
またはBoost.PointerContainerの['ptr_list'](http://www.boost.org/doc/libs/release/libs/ptr_container/doc/ptr_list.html)を使用してください。 –
ええ、私はSmartPointersをほとんどのものに使用していますが、時には生のポインタが優れています。 私はポインタpを持っていれば削除(p)が呼び出されたと思っていますが、これを知っていればOKです。私は生のポインタを解放します。 – danikaze