# include "some exceptions classes-h"
try {---call GrandMa () ;
switch (i) {
case A : throw "as court as long" ;
case B : throw GrosseException (33, "dommage") ;
case C : throw UneException (ATZ3, Null, 6) ;
}
...
call gostBuster () ;
}
Catch (const char * text) {
cerr << "un problème" << text << end ;
cerr << "on continue" ;
}
catch (GrosseException & ge){
if (! ge.Traitement ())throw ;
}
catch (une Exception & ne) {
...
}
catch (...) {// des fois qu'on ai oublié,
cerr <<"exception inatendue" ; throw ;
}
Pour les objets partiellement construits (throw dans un constructeur) seuls les destructeurs nécessaires seront exécutés.
Le processus d'appel des destructeurs est le "déroulement de pile", on parcourt la pile en appelant les destructeurs rencontrés.
La compilation ne peut pas rejeter une expression de la fonction qui renvoi une exception qui n'est pas dans la liste, c'est à l'éxécution qu'il faudra gérer la violation de spécification d'exception.
Void unexpected () Void terminate ()
Par défaut inexpected () appel
terminate ()
et terminate () appel abort ().
Inexpected () est appelé quand une
fonction lance une exception qui n'est pas dans sa liste.
Terminate () est appelé quand il
y a un problème :
- quand on ne peut trouver de gestionnaire adapté
- quand la pile est détériorée
- quand un destructeur appelé au court du
"déroulement de pile" essaie de sortir en lançant une exception.
Il est possible de changer la fonction appelée par inexpected () et terminate () :
type de f void (*PFV) ( ) ;L'adresse retournée est celle de l'ancienne fonction.
PFV set - inexpected (PFV) ;
PFV set - terminate (PFV) ;
On ne peut pas revenir de terminate () !