예외: 포착 하 고 예외를 삭제 합니다.
다음 지침과 예제에서는 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 예외 매크로를 변환.