다음을 통해 공유


예외: 예외 처리 및 삭제

다음 지침 및 예제에서는 예외를 catch하고 삭제하는 방법을 보여 줍니다. 및 키워드에 대한 try자세한 내용은 catch.throw

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

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

  • catch 블록은 새 예외를 발생시킵니다.

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

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

비고

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

예외를 catch하고 삭제하려면

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

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

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

    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 예외 매크로에서 변환을 참조하세요.

참고하십시오

예외 처리