Est gestionnaire nulle fin () a permis?
-
19-09-2019 - |
Question
Dans VC ++ 7 si je fais ce qui suit:
void myTerminate()
{
cout << "In myTerminate()";
abort();
}
int main( int, char** )
{
set_terminate( &myTerminate );
set_terminate( 0 );
terminate();
return 0;
}
le programme se comporte exactement comme si abort()
a été appelé directement, ce qui est exactement ce gestionnaire par défaut terminate()
fait.
Si j'omettez l'instruction set_terminate( 0 );
mon fin gestionnaire est appelé. Donc, appeler set_terminate( 0 )
semble avoir pour effet de remettre à zéro le gestionnaire de terminate()
à défaut.
Est-ce un comportement spécifique à VC ++ 7 uniquement? Ne sera pas le programme courir dans un comportement indéfini si je l'appelle set_terminate( 0 )
sur une autre mise en œuvre?
La solution
En regardant dans la norme révèle ce qui suit:
terminate_handler set_terminate(terminate_handler f) throw();
1 Effets: Établit la fonction désignée par f en tant que gestionnaire de courant fonction ... coupe
2 requis:. F ne doit pas être un pointeur NULL 3 Retours. Le terminate_handler précédent
Semble non standard.