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

2022. 8. 17. 19:44·STUDY/Effective C++

c++은 예외를 내보내는 소멸자를 좋아하지않는다.

당연하다. 소멸자가 그냥 조용히 소멸하는것이 아닌 예외까지 발생하면 프로그램의 불완전 종료 나 미정의 동작의 위험을 내포하고있기때문이다.

 

하지만 항사 우리가 원하는대로 코드를 짤 순 없다.

만약에 예외를 던지고 실패할 수 있는 코드를 소멸자에 넣어한다면 어떻게 해야할까

 

1. 프로그램 바로 끝내기

DBConn::~DBConn()
{
	try {db.close(); }
    catch (...) {
    	close 호출이 실패했다는 로그 출력;
        std::abort();
	}
}

abort를 호출해서 못 볼꼴을 미리 안보여준다.

 

 

2. 예외 삼켜버리기(무시하기)

DBConn::~DBConn()
{
	try {db.close(); }
    catch (...) {
    	close 호출이 실패했다는 로그 출력;
	}
}

발생한 예외를 그냥 무시하더라도 프로그램이 신뢰성 있게 지속될 경우에만 사용하자.

 

 

3. 사용자가 직접처리하기

void close()
{
	db.close();
    closed = true;
}

DBConn::~DBConn()
{
	if(!closed)
	try {db.close(); }
    catch (...) {
    	close 호출이 실패했다는 로그 출력;
        ...//실행끝내거나 예외무시
	}
}

사용자함수를 만들어 DBConnection이 닫혔는지 여부를 유지가능하며 사용자가 에러를 처리할 수 있는 기회를 가질 수 있다. 닫히지않았다면 DBConn의 소멸자에서 닫을 수도 있다. 

 

이렇게하면 데이터베이스 연결이 누출되지않으나, 소멸자에서 호출하는 close마저 실패한다면 다시 위의 1,2번 처럼 돌아올 수 밖에 없긴하다.

 

 

 

'STUDY > Effective C++' 카테고리의 다른 글

항목 10 : 대입 연산자는 *this의 참조자를 반환하게 하자  (0) 2022.08.24
항목 9 : 객체 생성 및 소멸 과정 중에는 절대로 가상 함수를 호출하지 말자  (0) 2022.08.17
항목 7: 다형성을 가진 기본 클래스에서는 소멸자를 반드시 가상 소멸자로 선언하자  (0) 2022.06.25
항목 6: 컴파일러가 만들어낸 함수가 필요 없으면 확실히 이들의 사용을 금해버리자  (0) 2022.06.23
항목 5: C++가 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자  (0) 2022.06.23
'STUDY/Effective C++' 카테고리의 다른 글
  • 항목 10 : 대입 연산자는 *this의 참조자를 반환하게 하자
  • 항목 9 : 객체 생성 및 소멸 과정 중에는 절대로 가상 함수를 호출하지 말자
  • 항목 7: 다형성을 가진 기본 클래스에서는 소멸자를 반드시 가상 소멸자로 선언하자
  • 항목 6: 컴파일러가 만들어낸 함수가 필요 없으면 확실히 이들의 사용을 금해버리자
wise_
wise_
  • wise_
    WHY'S BlOG
    wise_
  • 전체
    오늘
    어제
    • 분류 전체보기 (63)
      • PROJECT (19)
        • 젯슨나노 프로젝트 (0)
        • 유니티 (9)
      • STUDY (37)
        • 코딩문제 (13)
        • 알고리즘 (0)
        • Effective C++ (14)
        • 유니티 (8)
        • 언리얼 (2)
      • ERROR (7)
        • 오류덩어리들 (7)
      • REVIEW (0)
      • LIFE (0)
        • 작고 소중한 내 일상 (0)
        • 작고 귀여운 내 취미 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    게임
    힐링게임
    유니티
    1인개발
    코딩
    unity
    스마일게이트
    c#
    여우는오늘도친구를구한다
    퍼즐게임
    알고리즘
    null
    플로이드와샬
    와이즌
    게임개발
    C++
    ==
    인디게임
    error
    깊이우선탐색
    wisen
    모바일게임
    개발일지
    개발
    힐링
    TheFoxSeeksFriend
    윈터데브캠프
    언리얼
    백준
    귀여운
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
wise_
항목 8: 예외가 소멸자를 떠나지 못하도록 붙들어 놓자
상단으로

티스토리툴바