如何检测异常何时飞行?

pau*_*doo 13 c++ exception visual-c++

在C++(MSVC)中,如何测试异常当前是否"在飞行中".即,作为类析构函数的一部分被调用的代码可能会被调用,因为异常正在展开堆栈.如何检测这种情况,而不是正常情况下由于正常返回而调用析构函数?

Joe*_*oel 8

在你走到uncaught_exception()路径太远之前,请看http://www.gotw.ca/gotw/047.htm


Dia*_*ami 7

实际上可以这样做,在<exception>标头中调用uncaught_exception().您可能想要这样做的一个原因是在析构函数中抛出异常之前,如果将析构函数作为堆栈展开的一部分调用,则会导致程序终止.请参阅http://msdn.microsoft.com/en-us/library/k1atwat8%28VS.71%29.aspx

  • 请注意,虽然这会告诉您异常是否在飞行中,但对该事实的了解几乎从未有用.特别是,当在析构函数中使用时,它不会告诉您是否可以/应该在失败时抛出异常:http://www.gotw.ca/gotw/047.htm (7认同)