다음을 통해 공유


예외: 예외 Catch 및 삭제

다음 지침 및 예제에서는 예외를 catch하고 삭제하는 방법을 보여 줍니다. 및 catch키워드(keyword) 대한 try자세한 내용은 예외 및 throw 오류 처리에 대한 최신 C++ 모범 사례를 참조하세요.

예외를 삭제하지 않으면 해당 코드가 예외를 catch할 때마다 메모리 누수가 발생하므로 예외 처리기는 처리되는 예외 개체를 삭제해야 합니다.

catch 다음과 같은 경우 블록에서 예외를 삭제해야 합니다.

  • 블록은 catch 새 예외를 throw합니다.

    물론 동일한 예외를 다시 throw하는 경우 예외를 삭제해서는 안 됩니다.

    catch (CException* e)
    {
       if (m_bThrowExceptionAgain)
          throw; // Do not delete e
       else
          e->Delete();
    }
    
  • 실행은 블록 내에서 반환됩니다 catch .

참고 항목

삭제할 CException때 멤버 함수를 Delete 사용하여 예외를 삭제합니다. 예외가 힙에 delete 없는 경우 실패할 수 있으므로 키워드(keyword) 사용하지 마세요.

예외를 catch하고 삭제하려면

  1. try 키워드(keyword) 사용하여 블록을 설정합니다try. 블록 내에서 try 예외를 throw할 수 있는 모든 프로그램 문을 실행합니다.

    catch 키워드(keyword) 사용하여 블록을 설정합니다catch. 블록에 예외 처리 코드를 배치합니다 catch . 블록의 catch 코드는 블록 내 try 의 코드가 문에 catch 지정된 형식의 예외를 throw하는 경우에만 실행됩니다.

    다음 기본 구조는 블록과 catch 블록이 일반적으로 정렬되는 방법을 try 보여 줍니다.

    try
    {
       // Execute some code that might throw an exception.
       AfxThrowUserException();
    }
    catch (CException* e)
    {
       // Handle the exception here.
       // "e" contains information about the exception.
       e->Delete();
    }
    

    예외가 throw되면 예외 선언이 예외 형식과 일치하는 첫 번째 catch 블록으로 제어가 전달됩니다. 아래 나열된 대로 순차 catch 적 블록을 사용하여 다양한 유형의 예외를 선택적으로 처리할 수 있습니다.

    try
    {
       // Execute some code that might throw an exception.
       AfxThrowUserException();
    }
    catch (CMemoryException* e)
    {
       // Handle the out-of-memory exception here.
       e->Delete();
    }
    catch (CFileException* e)
    {
       // Handle the file exceptions here.
       e->Delete();
    }
    catch (CException* e)
    {
       // Handle all other types of exceptions here.
       e->Delete();
    }
    

자세한 내용은 예외: MFC 예외 매크로에서 변환을 참조 하세요.

참고 항목

예외 처리