예외 객체를 값으로 던집니다
지역 객체 주소나 포인터를 던지면 수명과 소유권이 흐려집니다.
예외 객체는 안전하게 복사될 수 있어야 하며, 잡을 때는
const 참조로 받아 불필요한 복사와 객체 잘림을 피합니다.
std::runtime_error처럼 의미 있는 표준 예외 계층을
우선합니다.
지역 객체 주소나 포인터를 던지면 수명과 소유권이 흐려집니다.
catch (const std::exception& e)는 다형성과 메시지를
보존합니다.
파일, 메모리, 락은 소멸자에서 풀리도록 감싸야 예외 중에도 누수가 없습니다.
실패 경계 throw 설계는 예외 타입보다 스택
풀기 중에도 자원과 객체 상태가 안전한지에서 결정됩니다.