Ist Null beenden () -Prozedur erlaubt?
-
19-09-2019 - |
Frage
In VC ++ 7, wenn ich die folgenden Code:
void myTerminate()
{
cout << "In myTerminate()";
abort();
}
int main( int, char** )
{
set_terminate( &myTerminate );
set_terminate( 0 );
terminate();
return 0;
}
das Programm verhält sich genau so, wie wenn abort()
genannt wurde direkt was genau das ist, was standardmäßig terminate()
Handler der Fall ist.
Wenn ich die set_terminate( 0 );
Anweisung auslassen meinen Handler beendet aufgerufen wird. So ruft set_terminate( 0 )
scheint die Wirkung des Zurücksetzens des terminate()
Handler Standard zu haben.
Dieses Verhalten ist spezifisch für VC ++ 7 nur? Werde das Programm nicht läuft in undefiniertes Verhalten, wenn ich set_terminate( 0 )
auf einer anderen Implementierung nennen?
Lösung
Ein Blick in den Standard zeigt die folgende:
terminate_handler set_terminate(terminate_handler f) throw();
1 Effekte: Legt die Funktion von f als aktuellen Handler bezeichnet Funktion ... Schnitt
2 Benötigt: f ist kein Null-Zeiger sein
. 3 . Rückkehr: Die vorherige terminate_handler
Es scheint, Nicht-Standard zu sein.