다음을 통해 공유


예외: 포착 하 고 예외를 삭제 합니다.

다음 지침과 예제에서는 catch 한 예외를 삭제 하는 방법을 보여 줍니다.에 대 한 자세한 내용은 시도, catch, 및 throw 키워드를 참조 하십시오. C++ 예외 처리.

해당 코드는 예외를 catch 할 때마다 예외를 삭제 하려면 실패 하면 메모리 누수가 발생 하기 때문에 예외 처리기가 처리 된 예외 개체를 삭제 해야 합니다.

사용자 catch 예외 블록을 삭제 해야 하는 경우:

  • Catch 블록에 새 예외를 throw 합니다.

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

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

[!참고]

삭제 시는 CException, 사용은 삭제 멤버 함수는 예외를 삭제 합니다.사용 하지 않는 있는 삭제 키워드를 예외 힙에 없는 경우 실패할 수 있기 때문에.

Catch 한 예외를 삭제 하려면

  • 사용은 시도 키워드를 설정 하는 시도 블록.내에서 예외를 throw 할 수 있는 프로그램 문을 실행 한 시도 블록.

    사용은 catch 키워드를 설정 하는 catch 블록.예외 처리 코드를 배치는 catch 블록.코드는 catch 블록 경우에 실행 됩니다 내의 코드는 시도 블록에 지정 된 형식의 예외를 throw는 catch 문.

    다음 기초를 보여 줍니다 어떻게 시도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 예외 매크로를 변환.

참고 항목

개념

MFC에서 처리 하는 예외