Null Terminate () 핸들러가 허용됩니까?
-
19-09-2019 - |
문제
다음을 수행하면 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 )
다른 구현에서?
해결책
표준을 살펴보면 다음이 나타납니다.
terminate_handler set_terminate(terminate_handler f) throw();
1 효과 : F로 지정된 기능을 현재 처리기 기능으로 설정합니다 ... 컷
2 요구 : F는 널 포인터가되어서는 안됩니다.
3 반환 : 이전 Terminate_handler.
비표준 인 것 같습니다.
제휴하지 않습니다 StackOverflow