В VC ++ 7, если я делаю следующее:
void myTerminate()
{
cout << "In myTerminate()";
abort();
}
int main( int, char** )
{
set_terminate( &myTerminate );
set_terminate( 0 );
terminate();
return 0;
}
программа ведет себя точно так же, как если бы abort()
был вызван напрямую, что и делает обработчик terminate()
по умолчанию.
Если я опущу оператор set_terminate( 0 );
, вызывается мой обработчик завершения. Таким образом, вызов set_terminate( 0 )
, похоже, приводит к сбросу обработчика terminate()
по умолчанию.
Это поведение относится только к VC ++ 7? Разве программа не столкнется с неопределенным поведением, если я вызову set_terminate( 0 )
в другой реализации?