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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top