throw 전에 네 가지를 확인한다

좋은 예외 설계는 던지는 타입, 잡는 방식, 자원 정리, catch 순서가 같은 방향을 보게 만드는 일입니다.

1

타입이 의미를 말하는가

숫자 코드보다 std::runtime_error나 도메인 예외를 고릅니다.

복구 코드가 실패 원인을 읽을 수 있어야 합니다.
2

값으로 던지는가

포인터 예외는 소유권을 흐리게 만듭니다.

예외 객체의 수명은 런타임이 관리하게 둡니다.
3

const 참조로 잡는가

catch (const std::exception& e)는 복사와 slicing을 피합니다.

what() 메시지와 실제 타입 정보를 안정적으로 읽습니다.
4

RAII가 정리하는가

파일, 락, 메모리는 스택 풀림 중 소멸자에서 닫혀야 합니다.

catch 블록에 수동 정리를 몰아넣지 않습니다.
최종 기준: 값으로 던지고 const 참조로 잡으며, 구체 catch를 먼저 두고, 자원은 RAII 객체가 정리하게 둡니다.