Pregunta

En VC ++ 7 si hago lo siguiente:

void myTerminate()
{
    cout << "In myTerminate()";
    abort();
}

int main( int, char** )
{
    set_terminate( &myTerminate );
    set_terminate( 0 );
    terminate();
    return 0;
}

el programa se comporta exactamente como si abort() fue llamado directamente, que es exactamente lo que hace manejador terminate() por defecto.

Si omite la sentencia set_terminate( 0 ); Mi terminar controlador está siendo llamado. Así set_terminate( 0 ) llamando parece tener el efecto de restablecer el manejador terminate() de forma predeterminada.

¿Es este comportamiento específico de VC ++ sólo el 7? No será el programa de correr en un comportamiento indefinido si llamo set_terminate( 0 ) en alguna otra aplicación?

¿Fue útil?

Solución

Mirando hacia el estándar revela lo siguiente:

terminate_handler set_terminate(terminate_handler f) throw();
  

1 Efectos: Establece la función   designada por f como el controlador actual   función ... cortó
   2 Requiere:. F no será un puntero nulo
       3 Devuelve:. El terminate_handler anterior

Parece ser no estándar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top