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 terminate
abort
. 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