Supposons que j'ai une classe comme celle-ci :
#include <iostream>
using namespace std;
class Boda {
private:
char *ptr;
public:
Boda() {
ptr = new char [20];
}
~Boda() {
cout << "calling ~Boda\n";
delete [] ptr;
}
void ouch() {
throw 99;
}
};
void bad() {
Boda b;
b.ouch();
}
int main() {
bad();
}
Il semble que le destructeur ~Boda
n'est jamais appelé, donc le ptr
les ressources ne sont jamais libérées.
Voici la sortie du programme :
terminate called after throwing an instance of 'int'
Aborted
Il semble donc que la réponse à ma question soit No
.
Mais je pensais que la pile était déroulée lorsqu'une exception était levée ? Pourquoi n'a-t-on pas Boda b
est détruit dans mon exemple ?
Veuillez m'aider à comprendre ce problème de ressources. Je veux écrire de meilleurs programmes à l'avenir.
Aussi, est-ce le soi-disant RAII
?
Merci, Boda Cydo.