Share via


처리되지 않은 C++ 예외

현재 예외에 대해 일치하는 처리기(또는 줄임표 catch 처리기)를 찾을 수 없는 경우 미리 정의된 terminate 런타임 함수가 호출됩니다. (처리기에서 명시적으로 호출 terminate 할 수도 있습니다.) 기본 동작 terminate 은 .를 호출 abort하는 것입니다. 애플리케이션을 종료하기 전에 terminate로 프로그램의 몇 가지 다른 함수를 호출하려면 단일 인수로 호출되는 함수 이름을 사용하여 set_terminate 함수를 호출합니다. set_terminate는 프로그램에서 언제든지 호출할 수 있습니다. 루틴은 terminate 항상 인수로 지정된 마지막 함수를 호출합니다 set_terminate.

예시

다음 예제에서는 예외를 char * throw하지만 형식 char *의 예외를 catch하도록 지정된 처리기를 포함하지 않습니다. set_terminate 호출은 terminateterm_func를 호출하도록 명령합니다.

// exceptions_Unhandled_Exceptions.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
void term_func() {
   cout << "term_func was called by terminate." << endl;
   exit( -1 );
}
int main() {
   try
   {
      set_terminate( term_func );
      throw "Out of memory!"; // No catch handler for this exception
   }
   catch( int )
   {
      cout << "Integer exception raised." << endl;
   }
   return 0;
}

출력

term_func was called by terminate.

term_func 함수는 exit를 호출하여 프로그램이나 현재 스레드를 종료합니다. 이 호출이 호출자로 반환되면 abort가 호출됩니다.

참고 항목

예외 및 오류 처리에 대한 최신 C++ 모범 사례