ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Effective C++...7
    일지 2022. 6. 6. 18:01

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

    소멸자에서 예외를 회피하는 방법

    먼저, 소멸자에서 예외가 발생하는 경우 디버깅이 거의 불가능하므로 예외가 발생하지 않는 게 가장 좋다.

    하지만 예외가 발생하는 경우엔 두 가지 방법으로 처리를 할 수 있다.

    1. 소멸자에서 예외 발생 시 로그를 출력하고 프로그램을 종료한다.
    2. 소멸자에서 예외 발생 시 로그를 출력하고 예외를 소멸시킨다.

     

    ※ 사용자에게 선택권이 없으므로 둘 다 좋은 방법은 아니다.

     

    사용자에게 선택권을 부여하는 방법

    소멸자에서 호출하던 Close 함수가 있었다면 이 함수를 사용자가 호출할 수 있도록 한다면 예외 발생 시 사용자 스스로 디버깅을 진행할 수 있게 된다.

     


    class DBConn {

    public:

        ...

        void close()

        {

            db.close();

            closed = true;

        }

        ~DBConn()

        {

            if (!closed)

            try {

                db.close();

            }

            catch (...) {

                close 호출 실패했다는 로그 출력

            }

        }

    private:

        DBConnection db;

        bool closed;

    }


     

    댓글

Designed by Tistory.