代码之家  ›  专栏  ›  技术社区  ›  pauldoo

如何检测异常在飞行中的时间?

  •  12
  • pauldoo  · 技术社区  · 15 年前

    在C++(MSVC)中,如何测试异常当前是否“正在运行”。也就是说,作为类析构函数的一部分调用的代码可能会被调用,因为异常正在展开堆栈。。与由于正常返回而调用析构函数的正常情况相反,如何检测这种情况?

    6 回复  |  直到 15 年前
        1
  •  8
  •   Diaa Sami    15 年前

    实际上可以这样做,在<中调用uncaught_exception();例外情况>标题。 看 http://msdn.microsoft.com/en-us/library/k1atwat8%28VS.71%29.aspx

        2
  •  8
  •   Joel    15 年前

    在沿着uncaught_exception()路径走得太远之前,请查看 http://www.gotw.ca/gotw/047.htm

        3
  •  3
  •   Paul Groke Chronial    7 年前

    在C++17中, std::uncaught_exceptions (注意复数“s”)已引入。这允许您捕获ctor中的“嵌套展开”计数,并在执行dtor时将捕获的值与当前值进行比较。这样,您就可以知道对象是否因为异常(dtor current value>captured value)而离开了其作用域而被销毁。

    这意味着您最终可以在C++中实现“自动撤消”保护之类的功能,耶。:)

        4
  •  1
  •   Raphaël Saint-Pierre    15 年前

    你可能在找

    // Returns true only if a thrown exception is being currently processed
    namespace std {
        bool uncaught_exception();
    };
    

    http://msdn.microsoft.com/en-us/library/k1atwat8.aspx

        5
  •  -1
  •   Mike McQuaid    15 年前

        6
  •  -1
  •   deemok    15 年前

    一种方法是用您的 own .

    另一方面,它总是要问一个问题——为什么要这样做?。。

    有关主题的更多链接: Reversing Microsoft Visual C++ Part I: Exception Handling The exception model