실패 종류 분류
입력 오류, 리소스 부족, 프로그래머 오류를 같은 방식으로 던지지 않는다.
예외 처리는 실패를 숨기지 않고 적절한 호출 계층까지 전달한다. 어떤 실패가 복구 가능하고 어떤 상태가 보존되어야 하는지 먼저 정해야 한다.
입력 오류, 리소스 부족, 프로그래머 오류를 같은 방식으로 던지지 않는다.
예외가 중간에 지나가도 지역 객체의 소멸자가 리소스를 정리하게 만든다.
catch는 처리할 수 있는 계층에만 두고, 로그만 남기고 삼키는 코드는 피한다.
try {
auto config = load_config(path);
run(config);
} catch (const ConfigError& e) {
report_to_user(e.what());
}