[c++] 예외 안전성 보장

C++에서 예외 안전성은 프로그램이 예외를 처리하고 정리하는 능력을 나타냅니다. 예외 안전성은 메모리 누수를 방지하고 객체 상태를 일관되게 유지하는 중요한 측면입니다. C++ 표준 라이브러리와 사용자 정의 클래스는 예외 안전성을 고려하여 설계되어야 합니다.

예외 안전성의 종류

  1. 기본 예외 안전성 (Basic exception safety): 모든 자원 누수가 생기지 않으며, 프로그램 상태는 예외 발생 전과 같아야 합니다.
  2. 강한 예외 안전성 (Strong exception safety): 기본 예외 안전성을 보장하면서, 연산을 수행하는 중간 상태에서도 일관된 객체 상태를 유지해야 합니다.
  3. 논 파괴적 예외 안전성 (No-throw guarantee): 예외가 절대로 발생하지 않아야 하며, 객체 상태는 변경되지 않아야 합니다.

예외 안전성 보장을 위한 방법

  1. RAII (Resource Acquisition Is Initialization): 리소스를 할당한 후 해당 리소스의 해제를 객체의 소멸자에서 처리함으로써 예외 안전성을 확보합니다.
  2. 예외 안전한 함수 사용: 예외를 발생시키지 않는 함수의 사용을 선호하거나, 예외가 발생할 수 있는 경우에는 기본 예외 안전성을 보장하는 방식으로 설계합니다.
  3. 예외 안전성 테스트: 모든 함수가 기능적으로 올바르게 동작하는 동시에 각 함수의 예외 안전성을 확인하기 위한 테스트를 수행합니다.

예외 안전성을 고려하여 코드를 작성하면 메모리 누수나 잘못된 객체 상태로부터 프로그램을 보호할 수 있습니다. C++에서는 예외 안전성을 보장하기 위한 다양한 기법과 가이드라인을 제공하고 있으니, 이를 활용하여 안정적이고 견고한 코드를 작성할 수 있습니다.


참고 문헌: