Programmation C ++: jeter des exceptions

Une fonction C ++ qui alloue les ressources localement peut avoir besoin pour intercepter une exception, faire un peu de traitement, puis réémettre vers le haut de la chaîne de la pile. Prenons l'exemple suivant:

annuler fileFunc () {ofstream * Pout = new ofstream ("Fichier.txt") - otherFunction () - supprimer pOut-}

Comme de nombreux programmeurs savent, la mémoire allouée par nouveau ISN # 8242-t revint au tas automatiquement. Si otherFunction () ont été de lancer une exception, le contrôle serait quitter le programme sans invoquer effacer, et la mémoire allouée au début de fileFunc () serait perdu.

Pour éviter ce problème, fileFunc () peut comprendre un catch (...) pour attraper toute exception lancée:

annuler fileFunc () {ofstream * Pout = new ofstream ("Fichier.txt") - try {otherFunction () - supprimer pOut-} catch (...) {supprimer Pout-throw-}}

Dans cette phrase, fileFunc () retourne la mémoire il a alloué plus tôt pour le tas. Cependant, il est pas en mesure de traiter le reste de l'exception, car il n'a aucune idée de ce qui aurait mal tourné. Il ne sait même pas quel type d'objet qu'il vient de prendre.

La jeter mot-clé sans aucun argument rethrows l'objet exception en cours amont de la chaîne à une fonction qui peut traiter correctement l'erreur.


» » » » Programmation C ++: jeter des exceptions