| 首页 | 技术文章 | 软件下载 | 博客 | 论坛 | 精品教程 | 黑客动画 | 视频资源 | 在线服务 | 黑客游戏 | 

您现在的位置: 中国X黑客小组 >> 技术文章 >> 编程技术 >> 程序设计 >> 文章正文 用户登录 新用户注册
  C++ 异常处理 B          【字体:
C++ 异常处理 B
作者:不详    文章来源:CnXHacker.Net    点击数:    更新时间:2007-5-21    

8.1.5 处理异常
异常处理程序由紧接在try-block之后的catch关键字确定。关键字catch也可紧接在其他catch块之后。程序发送的每个异常都必须被异常处理程序捕捉和处理。当异常的类型与catch的条件语句中的类型匹配(或可转换)时,异常被处理程序捕捉。一旦类型匹配成立,程序控制转到处理程序且栈被打开。

处理程序确定处理程序不正常状态的操作。
处理程序执行完毕后,程序会在当前的try-block中发送异常的那个处理程序后继续运行。其他处理程序不会对当前异常做出反映。goto语句可用于将程序控制跳出一个处理程序。若程序提供异常处理程序失败,程序终止。

注意 这些例子通过命令行使用bcc32.exe可成功地编译并运行,而不需使用IDE。

8.1.6 异常规范
C++提供一种名为exceptionspecification的特性可将一个函数可能发送的异常在声明中列出。exceptionspecification使用时类似于函数声明的后缀,句法如下:

这样的函数后缀不是函数类型的一部分。因此,指向函数的指针不会受exceptionspecification的影响。像这样的指针只检查函数返回值和参数类型。因此,下列声明是合法的:

当重载虚拟函数时需要小心。因为exceptionspecification不是函数类型的一部分,所以可能会破坏程序设计。
例1:在下例中,定义的派生类BETA::vfunc不发送任何异常,这偏离了原始的函数声明。

下例是带有异常规范的函数。
这样的函数的定义和所有的声明必须有一个包含相同的type-ids集的异常规范。若函数发送一个规范中未列出的异常,程序会调用unexpected。

8.1.7 异常处理的构造和析构
若不能成功地构造一个对象,类构造函数会发送异常。当按值发送对象且异常被引发时,拷贝构造函数被调用。拷贝构造函数在发送点初始化一个临时对象。应用程序也可产生另外的拷贝。

如果构造函数发送了异常,对象的析构函数就不需要被调用。析构函数仅为基类和那些在try-block中构造成功的对象调用。为try-block中构造的throw语句后的对象调用析构函数的进程称为stackunwinding。若析构函数在这个进程中引发一个异常且没有处理,则terminate被调用。析构函数是缺省调用的,不过可通过使用-xd-编译器选项关闭缺省设置。

8.1.8 未处理的异常
如果一个异常被发送但没有发现事件处理程序,程序调用terminate函数。下例说明了程序中出现未处理的异常时如何处理。

8.1.9 设置异常处理选项
表8-1是C++Builder编译器的异常处理选项。

文章录入:IceRiver    责任编辑:IceRiver 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    黑帽大会:备受关注的互联网
    微软推新计划打击黑客帮助安
    微软七月安全公告预告:四个重
    世界之窗等浏览器本地xss跨域
    北大青鸟网站被黑
    微软11元老30年后重聚首 最"
    IANA ICANN站点被黑 访问者被
    NEC将3亿美元收购NetCracker
    "木马点击器"泛滥 点击欺诈威
    瑞星公司06月20日发布 每日计
      网友评论:(只显示最新5条。评论内容只代表网友观点,与本站立场无关!)
    Powered by ICE RIVER - STUDIO
    » CnXHacker.CoM   © CopyRight 2002-2006, CnXHacker.CoM™, Inc. All Rights Reserved.