Estaba debatiendo con algunas universidades sobre lo que sucede cuando se lanza una excepción en una clase asignada dinámicamente. Sé que se llama a malloc y luego al constructor de la clase. El constructor nunca regresa, entonces, ¿qué pasa con el malloc?¿Se libera la memoria cuando lanzo una excepción?
Considere lo siguiente
class B
{
public:
B()
{
cout << "B::B()" << endl;
throw "B::exception";
}
~B()
{
cout << "B::~B()" << endl;
}
};
void main()
{
B *o = 0;
try
{
o = new B;
}
catch(const char *)
{
cout << "ouch!" << endl;
}
}
¿Qué ocurre con la memoria malloced 'O', ¿tiene fugas? ¿Captura la CRT la excepción del constructor y desasigna la memoria?
Saludos Rich
Respuesta corta: Sí. Ver Cătălin Pitiş Answer para más detalles. –