C++ · exception

예외 객체는 값으로 던지고 const 참조로 받기

throw가 예외 객체의 생명 주기를 관리하므로, 동적 할당 포인터를 던지는 방식보다 값과 참조 조합이 안전합니다.

전달 방식 비교

ownership
throw T

값으로 던지기

예외 객체의 보관과 정리는 런타임이 맡고 catch는 타입 매칭에 집중합니다.

catch const&

참조로 받기

파생 예외의 실제 타입을 유지하고 불필요한 추가 복사를 피합니다.

throw new

포인터 던지기

catch 블록에서 delete 책임이 생겨 누수와 중복 해제 위험이 커집니다.

catch 순서 점검

matching
구체 타입 먼저

MyException

도메인 오류를 복구하거나 사용자 메시지로 바꿀 때 사용합니다.

기반 타입 나중

std::exception

예상하지 못한 표준 예외를 마지막 안전망으로 보고합니다.

정보 보존

what()

오류 원인을 문자열로 남겨 로그와 디버깅에 활용합니다.

자원 정리

RAII

예외가 이동하는 동안 지역 객체의 소멸자가 자원을 정리합니다.