일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- more effective c++
- 참조자
- 반복자
- effective stl
- 비교 함수 객체
- 언리얼
- 티스토리챌린지
- Smart Pointer
- 영화 리뷰
- reference
- 게임
- virtual function
- 스마트 포인터
- 오블완
- Vector
- 다형성
- implicit conversion
- 암시적 변환
- 상속
- 예외
- operator new
- UE4
- c++
- 루아
- lua
- Effective c++
- 영화
- 메타테이블
- exception
- resource management class
Archives
- Today
- Total
스토리텔링 개발자
[Effective C++] 8. 소멸자 호출 중 예외 문제 본문
728x90
항목 8. 예외가 소멸자를 떠나지 못하도록 붙들어 놓자.
C++은 예외를 내보내는 소멸자를 좋아하지 않는다.
- '소멸자에서 예외 발생'은 미정의 사항이다.(컴파일러 구현에 따라 다르게 반응한다.)
- 그러므로 소멸자에서는 예외를 던지지 않도록 처리해야 한다.
소멸자가 예외를 던지지 않게 하는 두 가지 방법
- 예외 발생 시 프로그램을 종료시킨다
- 에러 발생 후 프로그램 실행을 계속할 수 없는 상황이라면 이 선택지
- 예외를 삼켜버린다
- 발생한 예외를 무시해도 프로그램이 신뢰성 있게 실행 지속되어야 한다는 보장이 된다면 이 선택지
- catch에서 어떤 처리도 해주지 않음으로써 예외를 삼켜버릴 수 있다.
소멸자에서 예외 발생하는 부분을 “사용자가 제어할 수도 있게” 함수를 제공해준다.
- 사용자에게 예외 처리를 처리할 수 있는 선택권을 주도록 한다.
- 예외를 처리할 필요가 있으면 그 예외는 소멸자가 아닌 다른 함수에서 비롯되어야 한다.
class DBConn{
public:
// 예외 발생 가능 기능을 노출하여,
// 사용자가 원하는 때 처리할 수 있도록 함수 제공
void close()
{
_db.close();
}
// 사용자가 close 함수를 사용하지 않았을 경우
// 1. 프로그램 종료, 2. 예외 삼킴
// 두 옵션 중 하나를 선택하여 처리해준다.
~DBConn() {
try
{
_db.close();
}
catch(....)
{ .... }
}
private:
DB _db;
};
728x90
'개발 > Effective C++' 카테고리의 다른 글
[Effective C++] 10. operator= 반환값 (0) | 2024.05.29 |
---|---|
[Effective C++] 9. 객체 생성 / 소멸 중 가상 함수 호출 문제 (0) | 2024.05.23 |
[Effective C++] 7. 다형성 부모 클래스라면 가상 소멸자 선언 (0) | 2024.05.21 |
[Effective C++] 6. 암시적으로 생성되는 함수 금지하기 (0) | 2024.05.20 |
[Effective C++] 5. 암시적으로 생성되는 함수 (0) | 2024.05.17 |
Comments