Module 6.Gestion des erreurs et des exceptions : Flashcards
lancer une exception
Fonction qui retourne un code d’erreur puis on peut intercepter ce code
Le mécanisme des exceptions :
o
lancer des exceptions sur le site de l’erreur.
lancer des exceptions sur le site de l’erreur.
o
transférer le contrôle à une autre partie du code
gérer la situation avec compétence.
Exemple :
o
«Incapable d’écrire ces octets» pourrait être devenir «Disque
plein» à un niveau supérieur.
spécifiés à l’aide de blocs
try catch
try
// code pouvant lancer une exception
//avec
throw Type exception
catch (Type exception erreur
// erreur contient de l’information
sur
//
// code de gestion de l’exception
une fonction lance une exception
une fonction lance une exception:
orecherche d’un site d’interception pour cette exception.
oLa fonction ne retourne pas normalement
se termine immédiatement
Exécution transférée au site d’interception le plus proche (pour cette exception).
Librairie standard du C++ :
oHiérarchie d’exceptions
oDu côté logic_error, i.e. erreur de programmation.
oDu côté runtime_error par contre, il s’agit d’exception pouvant toujours se produire.
oLa théorie du contrat : exceptions attachées à cette hiérarchie
Si le code dans le bloc try génère une exception de type
overflow_error ou underflow_error,
ole traitement correspondant est activé.
Si une exception d’un type différent est lancée,
oelle doit être gérée ailleurs sur un site d’interception du bon
type
Si un tel site n’existe pas, le programme s’arrêtera en donnant une erreur du type “Unhandle exception”.
gérer toutes les exceptions de contrat,
catch (ContratException& e)
o toutes les exceptions de contrat : precondition, postcondition, invariant et assertion seront attrapées
gérer seulement les préconditions
catch (PreconditionException &e).
gérer toutes les erreurs de programmation
catch (logic_error& e)
Attraper toutes les exceptions et relancer
pour faire une action protectrice pour faire un nettoyage quelconque.
try
{ // code
}
catch (…)
{ // Gestion de n’importe quelle exception
throw; // Relance l’exception
}
Une exception non gérée résulte en
un programme arrêté,
ominimiser le nombre d’exceptions lancées
oLes documenter clairement.
Ne jamais se servir des exceptions pour retourner des résultats de calcul.
one pas tenir compte du retour
–> arrêt immédiat du programme
Gestion de la pile d’appel par le mécanisme des exceptions
Le flot linéaire d’exécution des instructions ne s’applique plus lorsque qu’une exception est lancée.
Au moment où une exception se produit, le contrôle passe
au site d’interception le plus proche pour cette exception.
Tous les objets entre l’énoncé throw et l’énoncé catch
seront détruits et leur destructeur est appelé.
(Normalement les objets sur la pile sont détruits lorsque l’exécution du programme atteint la fin d’un bloc ou d’une fonction.)
Structurer le code pour bénéficier de la gestion automatique des ressources en utilisant les constructeurs et les destructeurs des classes:
Utiliser une variable locale (objet) de type ifstream,
on ouvre le fichier par le constructeur et le fichier est fermé par le destructeur :
ifstream fs(“input.dat”);
foo (fs);
Le fichier sera fermé lorsque le programme sera à la recherche d’un site d’interception pour une exception et que tous objets seront détruits.
Même problème avec la mémoire allouée sur le monceau:
On ne doit pas conserver de pointeur comme variable d’une fonction.
classes unique_ptr<>, share_ptr<> du standard
permet de conserver les pointeurs dans des classes dont le destructeur gère la désallocation.