Exceptional C++ Style : 11. try와 catch

try 블록이란?

코드 블록으로 해당 블록 내의 코드에서 예외가 발생하면 블록 다음에 있는 하나 이성의 catch 절들중 발생한 예외 형식에 맞는 처리부로 제어권이 이동된다.

// 예제 11-1 : try block 예제

try {
  if (some_condition)
throw string("this is string");
else if (some_other_condition)
throw 42;
} catch (const string&) {
// string이 던져졌을때 여기가 수행
} catch (...) {
// string 이외의 모든 예외는 여기서 처리된다.
}

try-catch 보다 중요한것 (= 예외 안정성)

예외 안전성은 try-catch의 작성과는 큰 관련은 없으며, try와 catch를 작성한다 해서 예외 안정성이 증가하는 경우도 드물다.

예외 안전성을 위해 고려해야 할 점
  1. 예외를 언제, 어디서 던져야 할까?
    • Throw 문을 어디에 넣을것인가에 대한 문제
      • 오류를 검출하긴 하지만 해당 오류를 처리하지는 못하는 곳에서 작성
  2. 예외를 언제, 어디서 처리해야 할까?
    • try-catch를 어디에 넣을것인가에 대한 문제
    • 예외를 잡았을때 catch에서 수행하는 것
      • 오류 변환 : 예외를 상세화 하여 상위 stack으로 throw 하거나 오류 code를 return
      • 오류 처리 : 예외 발생 전에 할당한 동적 자원의 해제
        • RAII를 이용하여 programming하였다면 동적 자원 해제를 위한 try-catch는 제거 할 수 있음.
  3. 어떤 함수 호출에 의한 예외가 내코드까지 거슬러 올라왔을때 내 코드는 과연 안전할 것인가?
    • 해당 예외가 적절한 오류 처리부에 도달하기 전에 그 예외를 신경쓰지 않고 작성한 어떤 코드에 도달하는 것만으로 프로그램 전체가 죽는 일이 없도록 하는 것에 대한 문제

댓글

  1. NJ casino sites 2021 - DRMCD
    Here at DRMCD, we want to offer you the best 군산 출장샵 of NJ 파주 출장마사지 gambling. 구미 출장안마 All 여주 출장샵 NJ casinos 밀양 출장마사지 offer real money online games like blackjack, roulette,

    답글삭제

댓글 쓰기

이 블로그의 인기 게시물

Raspberry pi 한글 설정 및 chromium 설치

Google Test를 이용한 Class의 Private/Protected Member Test