Throw Safety

throw는 값으로 던지고 참조로 받습니다

예외 객체는 안전하게 복사될 수 있어야 하며, 잡을 때는 const 참조로 받아 불필요한 복사와 객체 잘림을 피합니다.

던질 타입std::runtime_error처럼 의미 있는 표준 예외 계층을 우선합니다.
자원 정리스택 풀기 중 RAII 객체의 소멸자가 호출되는지 확인합니다.
value

예외 객체를 값으로 던집니다

지역 객체 주소나 포인터를 던지면 수명과 소유권이 흐려집니다.

ref

잡을 때 참조를 씁니다

catch (const std::exception& e)는 다형성과 메시지를 보존합니다.

RAII

정리는 객체에 맡깁니다

파일, 메모리, 락은 소멸자에서 풀리도록 감싸야 예외 중에도 누수가 없습니다.

기본 보장예외가 나도 객체는 파괴 가능하고 불변식은 유지됩니다.
강한 보장실패하면 호출 전 상태로 되돌아간 것처럼 보입니다.
금지 지점소멸자에서 예외가 밖으로 나가면 종료로 이어질 수 있어 피합니다.

실패 경계 throw 설계는 예외 타입보다 스택 풀기 중에도 자원과 객체 상태가 안전한지에서 결정됩니다.