카테고리 없음

[Effective C++] Item8_예외가 소멸자를 떠나지 못하도록 붙들어 놓자

해달 2018. 1. 26. 10:29

Item8_예외가 소멸자를 떠나지 못하도록 붙들어 놓자

챕터 핵심 내용

  • 소멸자에서는 예외가 빠져나가면 안 된다. 만약 소멸자 안에서 호출된 함수가 예외를 던질 가능성이 있다면, 어떤 예외이든지 소멸자에서 모두 받아낸 후에 삼켜 버리든지 프로그램을 끝내든지 해야 한다.
  • 어떤 클래스의 연산이 진행되다가 던진 예외에 대해 사용자가 반응해야 할 필요가 있다면, 해당 연산을 제공하는 함수는 반드시 보통의 함수(즉, 소멸자가 아닌 함수)여야 한다.

- 소멸자에서는 예외가 빠져나가면 안 된다. 만약 소멸자 안에서 호출된 함수가 예외를 던질 가능성이 있다면, 어떤 예외이든지 소멸자에서 모두 받아낸 후에 삼켜 버리든지 프로그램을 끝내든지 해야 한다

  • C++은 예외를 내보내는 소멸자를 좋아하지 않는다.
  • 소멸자 안에서 예외가 발생했다면 프로그램을 끝내거나(std::abort()) 예외를 삼킬 수 있다.
  • 대부분의 경우 예외 삼키기는 무엇이 잘못됐는지를 알려 주는 중요한 정보가 묻히기 때문에 좋지 않다.
  • 예외 삼키기의 효과를 보려면 발생한 예외를 무시한 뒤라도 프로그램이 신뢰성 있게 실행을 지속할 수 있어야 한다.

- 어떤 클래스의 연산이 진행되다가 던진 예외에 대해 사용자가 반응해야 할 필요가 있다면, 해당 연산을 제공하는 함수는 반드시 보통의 함수(즉, 소멸자가 아닌 함수)여야 한다

  • 어떤 동작이 예외를 일으키면서 실패할 가능성이 있고, 또 그 예외를 처리해야 할 필요가 있다면, 사용자에게 오류를 처리할 수 있는 인터페이스를 만들어야 한다.