Stavo discutendo con alcune università su cosa succede quando si lancia un'eccezione in una classe allocata dinamicamente. So che viene chiamato malloc, e quindi il costruttore della classe. Il costruttore non ritorna mai, quindi cosa succede al malloc?La memoria viene rilasciata quando lancio un'eccezione?
Si consideri il seguente
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;
}
}
Cosa accade alla memoria malloced 'O', ci si perde? Il CRT cattura l'eccezione del costruttore e rilascia la memoria?
Acclamazioni Rich
Risposta breve: Sì. Vedere la risposta di Cătălin Pitiş per i dettagli. –