2017-03-28 17 views
4

C++ 11 이상에서는 std::quick_exit을 호출하여 프로세스를 끝내지 않고 종료 할 수 있습니다. 즉, 소멸자가 호출되지 않습니다. [after | 동안] std::quick_exit.C++ 98에서 풀어 내지 않고 프로세스를 종료하는 방법은 무엇입니까?

내가 프로젝트가 :

  1. 그것은 전역 객체를 가지고 있으며, 전역 객체의 소멸자에서 치명적인 버그가;
  2. 전역 개체의 원본에 액세스 할 수 없습니다.
  3. main의 마지막 줄에 std::quick_exit을 호출 할 수 있으면 버그가 트리거되지 않습니다.
  4. 어떤 이유로 프로젝트는 C++ 98 컴파일러로 컴파일해야합니다. 즉, 나는 std::quick_exit을 C++ 98 컴파일러에서 호출 할 수 없다. 한마디로

:

어떤 기능을 C++ 98은 C++ (11)의 std::quick_exit에 해당?

Windows에서는 ExitProcess(0)으로 전화하여 강제로 아무런 정리 작업없이 프로세스를 종료 할 수 있습니다.

Linux에서 해당 항목은 무엇입니까?

+4

'_exit()'를 시도하십시오. 그것은 pre-C++ 11 표준에 대해 명확하게 문서화되어 있지 않지만, 이것은 또한 전역 소멸자를 우회해야합니다. – Rene

답변

3

abort()<cstdlib>에서 사용할 수 있습니다. SIGABRT을 프로세스에 보내고 신호가 잡히지 않으면 atexit() 또는 소멸자와 같은 임의의 파괴 루틴을 호출하지 않고 프로그램이 종료됩니다. 여기

상세 정보 : link

편집 : 그 문제의 경우 비정상 종료에 abort() 결과를 호출하는 반면, 일반적으로 std::quick_exit 종료하면, 모르겠어요.