Exception

예외 전파 스택 흐름

throw된 예외는 현재 함수에서 처리되지 않으면 호출자 방향으로 올라가며, 빠져나가는 범위의 완전히 생성된 지역 객체를 소멸한 뒤 맞는 catch를 찾는다.

호출 스택에서 예외가 움직이는 방향

throw · unwind · catch

throw 표현식

오류 조건에서 예외 객체를 만들고 정상 return 경로를 즉시 중단한다.

RAII 소멸

빠져나가는 블록의 완전히 생성된 지역 객체가 역순으로 소멸된다.

catch 탐색

호출자 쪽 catch 중 타입 변환과 참조 바인딩이 맞는 처리기를 찾는다.

terminate 조건

처리기가 없거나 unwind 중 소멸자가 다시 던지면 종료 경로로 간다.

throw Error{} scope destructor caller catch match catch by const ref recover or terminate
리뷰 포인트

catch를 값으로 받으면 slicing이 생길 수 있으므로 보통 const std::exception&처럼 참조로 받는다. 소멸자는 unwind 중 예외를 밖으로 내보내지 않는다.