예외 객체 생성
throw 표현식으로 예외 객체가 만들어지고 정적 타입과 동적 타입이 catch 선택에 영향을 준다.
값으로 던지고 참조로 받는 패턴을 자주 쓴다throw가 catch로 이동한다는 한 줄 설명은 예외 흐름의 위험을 숨긴다. 예외 객체가 만들어지고, 스택이 풀리며 RAII 소멸자가 실행되고, 가장 가까운 matching catch가 선택되며, noexcept나 소멸자 예외에서는 terminate로 이어질 수 있다.
throw 표현식으로 예외 객체가 만들어지고 정적 타입과 동적 타입이 catch 선택에 영향을 준다.
값으로 던지고 참조로 받는 패턴을 자주 쓴다호출 스택을 거슬러 올라가며 지역 객체의 소멸자가 실행된다.
RAII 소멸자가 여기서 작동한다위에서 아래 순서로 타입이 맞는 catch를 찾으므로 파생 타입을 먼저 둔다.
catch(...)는 마지막에 둔다noexcept 함수 밖으로 예외가 나가면 terminate가 호출된다.
컨테이너 이동 최적화에도 noexcept가 영향을 준다스택 풀기 중 소멸자에서 또 예외가 나오면 terminate 위험이 커진다.
소멸자는 예외를 밖으로 내보내지 않는다