-
Effective C++...7일지 2022. 6. 6. 18:01
예외가 소멸자를 떠나지 못하도록 붙들어 놓자
소멸자에서 예외를 회피하는 방법
먼저, 소멸자에서 예외가 발생하는 경우 디버깅이 거의 불가능하므로 예외가 발생하지 않는 게 가장 좋다.
하지만 예외가 발생하는 경우엔 두 가지 방법으로 처리를 할 수 있다.
- 소멸자에서 예외 발생 시 로그를 출력하고 프로그램을 종료한다.
- 소멸자에서 예외 발생 시 로그를 출력하고 예외를 소멸시킨다.
※ 사용자에게 선택권이 없으므로 둘 다 좋은 방법은 아니다.
사용자에게 선택권을 부여하는 방법
소멸자에서 호출하던 Close 함수가 있었다면 이 함수를 사용자가 호출할 수 있도록 한다면 예외 발생 시 사용자 스스로 디버깅을 진행할 수 있게 된다.
class DBConn {
public:
...
void close()
{
db.close();
closed = true;
}
~DBConn()
{
if (!closed)
try {
db.close();
}
catch (...) {
close 호출 실패했다는 로그 출력
}
}
private:
DBConnection db;
bool closed;
}