Rappels
Le mécanisme général
Depuis la version 3, C++ dispose d’un mécanisme dit de gestion des exceptions. Une
exception est une rupture de séquence (pas un appel de fonction !) déclenchée (on dit
aussi « levée ») par un programme à l’aide de l’instruction throw dans laquelle on
mentionne une expression quelconque. Il y a alors branchement à un ensemble
d’instructions, dit « gestionnaire d’exceptions », choisi en fonction de la nature de
l’expression indiquée à throw.
Pour qu’une portion de programme puisse intercepter une exception, il est nécessaire
qu’elle figure à l’intérieur d’un bloc précédé du mot-clé try. Ce dernier soit être suivi
d’une ou de plusieurs instructions catch représentant les différents gestionnaires
correspondants, comme dans ce schéma :
try
{ ..... // instructions susceptibles de lever une exception, soit
// directement par throw (exp), soit par le biais de fonctions
// appelées
}
catch (type_a ...)
{ ..... // traitement de l'exception correspondant au type type_a
}
catch (type_b ...)
{ ..... // traitement de l'exception correspondant au type type_b
}
.....
catch (type_n ...)
{ ..... // traitement de l'exception correspondant au type type_n
}
Un gestionnaire d’exceptions peut contenir des instructions exit ou abort qui mettent fin à
l’exécution du programme. Une instruction return fait sortir de la fonction ayant levé
l’exception. Dans les autres cas (rarement utilisés), on passe aux instructions suivant le
bloc try concerné.
Algorithme de choix d’un gestionnaire d’exceptions
Lorsqu’une exception est levée par throw, avec le type T, on recherche, dans cet ordre,
un gestionnaire correspondant à l’un des types suivants : type T, type de base de T,
pointeur sur une classe dérivée (si T est d’un type pointeur sur une classe), type
indéterminé (indiqué par catch(...)) dans le gestionnaire.
330
Précédent

- 331/398

Suivant