明辉站/编程语言/内容

解释c++未捕获异常的影响

网站教程2024-01-05 阅读
[摘要]C++ 标准不指定程序在遇到未捕获异常时的行为。在一些系统中,遇到这种情况的结果是显示完整的堆栈跟踪,也就意味着在程序结束之前自动对象会正确地销毁。而在另外一些系统中,未捕获异常会导致程序直接结束,而不会销毁自动对象。 这种回旋余地是不一致的;解决用户需要与供应商需要之间的冲突导致了这一现象...

    C++ 标准不指定程序在遇到未捕获异常时的行为。在一些系统中,遇到这种情况的结果是显示完整的堆栈跟踪,也就意味着在程序结束之前自动对象会正确地销毁。而在另外一些系统中,未捕获异常会导致程序直接结束,而不会销毁自动对象。

    这种回旋余地是不一致的;解决用户需要与供应商需要之间的冲突导致了这一现象的产生。在某些调试环境中,在遇到未捕获异常时避免析构对象是必要的,因为它能够让用户在程序终止之前恢复执行。相反,在一些硬件架构中,如果不同时正确地销毁对象,那么展开堆栈几乎不可能做到。

    因为这是一个平台相关的行为,所以程序员就要分析在他们的系统在出现未捕获异常时的行为。更重要的是,如果我们的代码将在运行在多个平台之上,那么我们需要在 main() 函数中使用一个 catch(. . .) 代码块来保证程序行为在不同平台下的一致性。

    int main()
    {
      try
      {
        f();
      }
     catch(DerivedEx& d) //handle most derived exception first
      {}
     catch(BaseEx& e)  
     {}
     catch(...) //no exception is left uncaught
     {}
   }

    这样就保证了不会出现未捕获的异常。

……

相关阅读