mirada a este código:¿Por qué C++ std :: list :: clear() no llama a destructores?
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;
}
Y luego, mira a esta salida:
Constructor
Destructor
Contructor
1
0
La pregunta es: ¿Por qué es el destructor del elemento de lista no se llama al l.clear()
?
Bien, eso es lo que pensé pero quería confirmarlo. – danikaze
O use Boost.PointerContainer's ['ptr_list'] (http://www.boost.org/doc/libs/release/libs/ptr_container/doc/ptr_list.html). –
Sí, uso SmartPointers para la mayoría de las cosas, pero a veces los punteros crudos son mejores. La cosa es que pensé que si tenía un puntero p, se llamaba delete (p) ... pero sabiendo esto ahora está bien. Voy a liberar punteros sin procesar. – danikaze