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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top