Se permite interrumpir nula () manipulador?
-
19-09-2019 - |
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?
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.