너님들이 C++ 런타임 라이브러리라면 어떻게 할 건가요?
스택에 할당된 Foo클래스의 인스턴스의 소멸자 안에서 예외가 발생해서 Bar가 던져지면,
1. Bar를 무시하고 계속 하던거 할까요 아니면
2. 중간에 나가서 catch(Bar bar)를 찾으러 갈까요?
1대로 하면 이건 완전히 로직 상 에러고(그럼 예외가 무슨 필요인가요)
2대로 하면 Foo는 소멸되다 말고, 그리고 또 소멸자가 호출되어야 할 인스턴스들이 더 있을지도 모르는 상황에, 어디 있을지도 모를 예외 처리자를 찾아가다니. 이래도 좆됨
그래서 어떻게 해도 좆 되긴 마찬가지
그래서 C++ 표준에선 소멸자에서 예외가 처리되지 않고 빠져나오면 terminate를 호출하도록 되어 있습니다.
물론 스택이 아니라 힙에 할당된 거면 뭐 상관 없습니다.
댓글 0