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