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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top