看看這段代碼:爲什麼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)被稱爲...但現在知道這沒關係。我會釋放原始指針。 – danikaze