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

ZDNet软件频道 时间:2004-06-11 作者:Builder.com |  我要评论()
本文关键词:cpptips
C++ 标准不指定程序在遇到未捕获异常时的行为。在一些系统中,遇到这种情况的结果是显示完整的堆栈跟踪,也就意味着在程序结束之前自动对象会正确地销毁。而在另外一些系统中,未捕获异常会导致程序直接结束,而不会销毁自动对象。
本文译自Builder.com,未经许可请勿转载

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

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

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

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

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


本文作者:Danny Kalev 是一位系统分析员、软件工程师,他具有14年在 C++ 和面向对象设计方面的经验。


责任编辑:李宁

欢迎评论投稿

百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134