이번 항목은 uncaught_exception() 함수가 무엇이고 어떻게 쓸수 있는지에 대한 이야기 이다.


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/ 싸이트 들어 갔다가 재미있는 정보를 보게 되어서, --> 쪽에 링크 추가 시켰다. 가끔 들려 정보를 보고 싶어진다.


  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기