IS NULL terminate () gestore permesso?
-
19-09-2019 - |
Domanda
In VC ++ 7 se faccio la seguente:
void myTerminate()
{
cout << "In myTerminate()";
abort();
}
int main( int, char** )
{
set_terminate( &myTerminate );
set_terminate( 0 );
terminate();
return 0;
}
il programma si comporta esattamente come se abort()
è stato chiamato direttamente che è esattamente ciò gestore predefinito terminate()
fa.
Se Tralascio la dichiarazione set_terminate( 0 );
il mio sospendere gestore viene chiamato. Quindi chiamando set_terminate( 0 )
sembra avere l'effetto di reimpostare il gestore terminate()
per impostazione predefinita.
E 'questo comportamento specifico di VC ++ soli 7? Il programma non incorrere in un comportamento indefinito se chiamo set_terminate( 0 )
su qualche altra implementazione?
Soluzione
Guardando nello standard rivela il seguente:
terminate_handler set_terminate(terminate_handler f) throw();
1 Effetti: Stabilisce la funzione designato dal f come gestore attuale funzione di ... tagliare
2 Richiede:. F non deve essere un puntatore nullo
3 Returns:. L'terminate_handler precedente
Sembra essere non standard.