문제

다음을 수행하면 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.

비표준 인 것 같습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top