Exceptions

# 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 ;
}
Lorsque le contrôle passe d'un point de lancement à un gestionnaire, les destructeurs sont invoqués sur tous les objets automatiques construits depuis que le block-try a été entré.

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.

 

Une fonction peut spécifier la liste des exceptions qu'elle peut lever directement ou indirectement.
         Extern void (mafunc (int, int) throw (cry, police, love) ;

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) ( ) ;
PFV set - inexpected (PFV) ;
PFV set - terminate (PFV) ;
L'adresse retournée est celle de l'ancienne fonction.

On ne peut pas revenir de terminate () !