Dans VC++ 7 si je fais ce qui suit:Le gestionnaire null terminate() est-il autorisé?
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 que l'action par défaut terminate()
.
Si j'omets l'instruction set_terminate(0);
, mon gestionnaire de terminaison est appelé. L'appel du set_terminate(0)
semble donc avoir pour effet de réinitialiser le gestionnaire terminate()
par défaut.
Ce comportement est-il spécifique à VC++ 7 uniquement? Le programme ne fonctionnera-t-il pas dans un comportement indéfini si j'appelle set_terminate(0)
sur une autre implémentation?
Section 18.6.3.2 :) – Manuel
Il s'agit donc d'un comportement non spécifié, n'est-ce pas? – sharptooth
Oui, c'est un comportement indéfini. Vous devez stocker le gestionnaire précédent et le récupérer explicitement. –