예외 흐름

예외 처리 스택 전개

try-catch는 오류 분기 문법이 아니라 예외가 던져진 뒤 지역 객체 소멸자 호출, catch 타입 매칭, 복구 가능성 판단이 이어지는 실행 모델이다.

01

예외 발생

함수가 복구할 수 없는 조건을 만나 exception 객체를 throw한다.

error signal
02

스택 되감기

호출 스택을 올라가며 범위 안 지역 객체의 소멸자를 호출한다.

RAII cleanup
03

catch 탐색

던진 타입과 맞는 catch 블록을 가장 가까운 호출자부터 찾는다.

handler search
04

복구/재던짐

처리 가능하면 복구하고, 맥락만 붙일 경우 다시 throw한다.

recover or propagate
basic guarantee
예외 후에도 객체 불변식 유지 리소스 누수와 깨진 상태가 없어야 한다.
valid state
strong guarantee
실패 시 작업 전 상태로 복귀 copy-and-swap, 임시 객체로 commit 전까지 원본을 보존한다.
rollback
noexcept
예외를 던지지 않음 약속 소멸자와 move 생성자에서 특히 중요하며 위반 시 terminate가 날 수 있다.
hard promise
catch order
파생 타입을 먼저 잡음 std::exception을 먼저 catch하면 더 구체적인 예외 처리가 가려진다.
specific first

리뷰 기준

RAII new/delete 수동 정리 대신 unique_ptr/vector가 unwind 중 자동 정리하게 한다.
복구 가능성 잡아도 할 수 있는 일이 없으면 catch하지 말고 경계 계층으로 전파한다.
소멸자 소멸자에서 예외가 밖으로 나가지 않도록 방어한다.