exception flow

throw가 발생하면 스택을 접으며 맞는 catch를 찾는다

try 블록에서 예외 객체가 던져지면 현재 실행 흐름은 멈추고, 지역 객체 정리와 호출자 전파를 거쳐 타입이 맞는 catch를 만날 때까지 스택이 전개됩니다.

main

try 블록이 divide 호출을 감싸고, 이후 catch 후보를 순서대로 둡니다.

divide

denominator가 0이면 정상 반환 대신 예외 객체를 던집니다.

throw

현재 블록의 남은 문장은 실행되지 않고, 스택 전개가 시작됩니다.

catch int

타입 불일치

던진 객체 타입과 맞지 않으면 다음 catch 후보로 넘어갑니다.

catch char*

처리 지점

예외 타입이 맞으면 해당 블록을 실행하고 try-catch 다음으로 이어집니다.

no catch

상위 전파

어디서도 잡히지 않으면 main 밖까지 전파되어 비정상 종료로 이어집니다.

실행 순서
try 진입 throw 소멸자 catch 탐색 이후 실행

예외 처리는 단순한 분기가 아니라 함수 호출 스택을 거슬러 올라가며 자원 정리와 타입 매칭을 함께 수행하는 제어 흐름입니다.

구체 catch

좁은 타입을 먼저 둔다

넓은 catch를 먼저 두면 더 구체적인 복구 코드가 도달하지 못할 수 있습니다.

RAII

자원 정리는 객체가 맡는다

파일, 메모리, 락은 소멸자로 정리되게 두면 예외 경로에서도 누수가 줄어듭니다.

복구 범위

잡고도 처리하지 못하면 다시 던진다

로그만 남기는 catch는 오류를 숨길 수 있으므로 호출자에게 전파할지 결정합니다.