É nulo terminar () manipulador permitido?
-
19-09-2019 - |
Pergunta
No VC ++ 7, se eu faço o seguinte:
void myTerminate()
{
cout << "In myTerminate()";
abort();
}
int main( int, char** )
{
set_terminate( &myTerminate );
set_terminate( 0 );
terminate();
return 0;
}
se comporta programa exatamente como se abort()
foi chamado diretamente que é exatamente o manipulador terminate()
padrão faz.
Se eu omitir a declaração set_terminate( 0 );
minha encerrar manipulador está sendo chamado. Então, chamando set_terminate( 0 )
parece ter o efeito de redefinir o manipulador terminate()
ao padrão.
É esse comportamento específico para VC ++ apenas 7? Não a execução do programa em um comportamento indefinido se eu chamar set_terminate( 0 )
em alguma outra aplicação?
Solução
Olhando para o padrão revela o seguinte:
terminate_handler set_terminate(terminate_handler f) throw();
1 Efeitos: Estabelece a função designada por f como o manipulador atual função ... corte
2 Requer: f não deve ser um ponteiro nulo
. 3 Retorna:. O terminate_handler anterior
Parece ser não-padrão.