1. std::uncaught_exception() 은 무슨 일을 하나?
2. 이 코드가 좋은가? 나쁜가?
3. uncaught_exception()을 사용할 수 있는 다른 좋은 방법이 있나?
해설
1. std::uncaught_exception() 은 무슨 일을 하나?
현재 처리되지 않은 예외가 있는지를 알아낼 수 있는 함수이며, 처리되지 않은 예외가 있을 경우 true 를 리턴하고 예외가 없을 경우 false 를 리턴 하는 함수이다.
표준에 따르면, 예외 객체가 발생된 시점부터 예외 객체가 소멸된 시점까지 true 를 리턴한다. 이 시점은 스택언와인딩(stack unwinding) 기간 중일 때도 포함한다. 다시 rethrow 한면, 역시 예외객체가 생성된 시점부터 소멸된 시점까지 true 를 리턴한다.
2. 다음 코드가 좋은가 나쁜가?
해당 코드의 목적을 안다면 좋다. 현재 소멸자가 호출된 시점에서 예외가 발생되어 있는지 체크하여 예외가 동시에 두개 이상 발생되지 않게 하기 위해서 분기 시키기 위한 코드이다. 하지만 해당 코드를 자세히보면, 소멸자에서 예외를 발생 시킬 수 있는 로직이 들어 간다.
어떠한 경우에서건 소멸자에서 예외를 발생시키면, 예외때문에 정신줄 놓을 지경일 때 모든 책임을 그 코드를 짠 프로그래머가 책임 져야 할 지도 모른다. (.. : )
또한 이 uncaught_exception() 함수는 컴파일러마다 표준을 따르지 않은 경우가 많기 때문에(g++ 에선 따르지 않는다. C++ of the Day #42 - Use of std::bad_exception 참조 )
MSVC2003 에선 표준에 만족할 만한 사항일 때도 false 를 리턴 한다고 나와 있다.
참조(http://msdn.microsoft.com/en-us/library/aa903425(VS.71).aspx)
MSVC2005 에선, 테스트 코드를 이용하여 테스트 했을 때, 표준을 따르는 것으로 보인다.
MSVC Standard C++ Library Reference uncaught_exception 참조
3. uncaught_exception()을 사용할 수 있는 다른 좋은 방법이 있나?
허브 셔터 조차도 아직까지 이 함수을 어떻게 운용해야 할지 모른다고 한다. 결국 .. "할수 있으면 하봐라" 함수로 낙인 찍힌 함수가 아닐까 한다.
총평
영어 공부 해야겠다는 생각이 점점 들기 시작한다. .. ... 참고로 http://ideathinking.com/blog-v2/ 싸이트 들어 갔다가 재미있는 정보를 보게 되어서, --> 쪽에 링크 추가 시켰다. 가끔 들려 정보를 보고 싶어진다.
'책 정리 > More Exceptional C++' 카테고리의 다른 글
항목 39 : 네임스페스 Part 1 : using 선언과 using 지시자 (난이도 : 2) (1) | 2008.12.08 |
---|---|
항목 38 : typedef (난이도 : 3) (0) | 2008.12.08 |
항목 37 : 전방 선언(forward dclarations) (난이도 : 3) (0) | 2008.12.08 |
항목 36 : 초기화 (변수 초기화, 생성자의 문제점) (난이도 : 3) (0) | 2008.12.07 |
항목 23 : 예외 안전 클래스 설계 Part 2 : 상속 (난이도 : 6) (0) | 2008.12.06 |
항목 22 : 예외 안전 클래스 설계 Part 1 : 복사 지정 연산(copy assignment) (난이도 7) (0) | 2008.12.06 |
항목 21 : 관리되지 않은 포인터 문제 Part2 : auto_ptr은? (난이도 8) (0) | 2008.12.06 |
항목 20 : 관리되지 않은 포인터 문제 Part 1: 매개변수 (난이도 6) (0) | 2008.12.06 |
항목 18 : 생성자 실패 Part2 : 흡수? (0) | 2008.12.03 |
항목 17 : 생성자 실패 Part 1 : 객체의 수명 (난이도 : 4) (0) | 2008.12.02 |
최근댓글