Exceptions C++ non gérées

Si un gestionnaire correspondant (ou gestionnaire de points de suspension catch ) est introuvable pour l’exception actuelle, la fonction d’exécution prédéfinie terminate est appelée. (Vous pouvez également appeler terminate explicitement l’un de vos gestionnaires.) L’action par défaut est d’appeler terminateabort. Si vous souhaitez terminate pour appeler une autre fonction dans votre programme avant de quitter l’application, appelez la fonction set_terminate avec le nom de la fonction à appeler comme unique argument. Vous pouvez appeler set_terminate à tout moment dans votre programme. La terminate routine appelle toujours la dernière fonction donnée en tant qu’argument à set_terminate.

Exemple

L'exemple suivant lève une exception char *, mais ne contient pas de gestionnaire désigné pour intercepter des exceptions de type char *. L'appel à set_terminate indique à terminate d'appeler term_func.

// exceptions_Unhandled_Exceptions.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
void term_func() {
   cout << "term_func was called by terminate." << endl;
   exit( -1 );
}
int main() {
   try
   {
      set_terminate( term_func );
      throw "Out of memory!"; // No catch handler for this exception
   }
   catch( int )
   {
      cout << "Integer exception raised." << endl;
   }
   return 0;
}

Sortie

term_func was called by terminate.

La fonction term_func doit terminer le programme ou le thread actuel, de préférence en appelant exit. Si elle ne fait pas cela et revient à la place à son appelant, la fonction abort est appelée.

Voir aussi

Meilleures pratiques C++ modernes pour la gestion des exceptions et des erreurs