#1. [레거시 C++ 가이드] 예외 안전 코드
예외 안전(safe) 코드는 예외가 발생하지 않는 코드가 아니라, 예외가 발생해도 안전하게 복원되고 계속 동작해도 무방하게 예외 보증하는 코드다. 예외 상황을 사전에 예측하고 프로그래밍 하라. 모든 함수는 실패할 수 있다고 가정하고 프로그래밍 해라. ...
예외 안전(safe) 코드는 예외가 발생하지 않는 코드가 아니라, 예외가 발생해도 안전하게 복원되고 계속 동작해도 무방하게 예외 보증하는 코드다. 예외 상황을 사전에 예측하고 프로그래밍 하라. 모든 함수는 실패할 수 있다고 가정하고 프로그래밍 해라. ...
해결할 수 없는 예외 상황은 오류 코드 리턴보다는 강제성이 있는 throw로 보고하라. 예외를 해결할 수 있는 곳에서 탐지하라. catch()에서 예외 개체가 복사 생성되지 않도록 참조자로 받아라. 예외를 그대로 전파할 경우에는 throw;를 사...
모던 C++ (C++11~) 동적 예외 사양은 deprecate 되었습니다. 예외를 나열하는 것보다 noexcept로 예외를 방출하느냐 안하느냐만 관심을 둡니다. (C++17~) 동적 예외 사양 관련해서 throw()가 deprecate 되었습니다. 이제 ...
사전 가정과 사후 가정을 진단하라. 진단 코드가 최소화 되도록, 포인터 보다는 참조자를 사용하고, 코딩 계약을 단단하게 만들어라.
예외에 안전하도록 기본 보증과 강한 보증을 하라. 기본 보증이 되도록 스마트 포인터나 Holder를 사용하라. 강한 보증이 되도록 클래스를 설계하라.(예외 안전에 좋은 클래스 설계 참고) 모듈의 경계에서 예외가 방출되지 않도록 예외를 catch(...