Görünüş:Neden C++ std :: list :: clear() destructor'ları çağırmıyor? Bu koda
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;
}
Ve sonra, bu çıkış bakmak:
Constructor
Destructor
Contructor
1
0
soru şudur: Neden l.clear()
de aramadı liste elemanının Yıkıcı mı?
Güzel, düşündüğüm buydu ama onaylamak istedim. – danikaze
Veya Boost.PointerContainer's ['ptr_list'] (http://www.boost.org/doc/libs/release/libs/ptr_container/doc/ptr_list.html) kullanın. –
Evet, çoğu şey için SmartPointer'ları kullanıyorum, ancak bir takım ham işaretçiler daha iyi. Şey, bir p işaretçisiysem, sil (p) denildi ... ama şimdi bunu bilmek iyi olur diye düşündüm. Ham işaretçileri serbest bırakacağım. – danikaze