全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
异常控制try,catch用法小结 出处:ChinaU1、基础介绍try/程序中抛出异常throw value;catch(valuetype v)/例外处理程序段语法小结:throw抛出值,catch接受,当然,throw必须在“try语句块”中才有效。2、深入throw:(i)、程序接受到throw语句后就会自动调用析构器,把该域(try后的括号内)对象clean up,然后再进入catch语句(如果在循环体中就退出循环)。这种机制会引起一些致命的错误,比如,当“类”有指针成员变量时(又是指针!),在 “类的构建器”中的throw语句引起的退出,会导致这个指针所指向的对象没有被析构。这里很基础,就不深入了,提示一下,把指针改为类就行了,比如模板类来代替指针,在模板类的内部设置一个析构函数。(ii)、语句“throw;”抛出一个无法被捕获的异常,即使是catch(.)也不能捕捉到,这时进入终止函数,见下catch。3、深入catch:一般的catch出现的形式是:trycatch(except1&)catch(except2&)catch(.) /接受所有异常一般都写成引用(except1&),原因很简单,效率。问题a:抛出异常,但是catch不到异常怎么办?(注意没有java类似的finally语句)在catch没有捕获到匹配的异常的时候,会调用默认的终止函数。可以调用set_terminate()来设置终止函数,参数是一个函数指针,类型是:void (*terminate)()。到这里,可以题个问题:“没有try-catch,直接在程序中throw;,会怎么样?”其他一些技巧:4、try一个函数体,形式如下void fun(type1,type2) trytry放在函数体后函数定义catch(typeX)这个用法的效果就相当于:void fun() try函数定义5、throw一个函数体,形式如下:void fun (); / 能抛出任何类型的异常void fun () throw(except1,except2,except3) / 后面括号里面是一个异常参数表,本例中只能抛出这3中异常void fun () throw()/ 参数表为空,不能抛出异常问题b:假设fun()中抛出了一个不在“异常参数表”中的异常,会怎么样?答:调用set_terminate()中设定的终止函数。然而,这只是表面现象,实际上是调用默认的unexpected()函数,然而这个默认的unexpected()调用了set_terminate()中设定的终止函数。可以用set_unexpected()来设置unexpected,就像set_terminate()一样的用法,但是在设定了新的“unexpected()”之后,就不会再调用set_terminater中设定的终止函数了。这个语法是很有用的,因为在用别人的代码时,不知道哪个地方会调用什么函数又会抛出什么异常,用一个异常参数表在申明时限制一下,很实用。摘自:/startexcel/archive/2009/05/19/4201585.aspxvc try catch捕捉所有异常的问题try catch()以前都是用try catch()来捕获C+中一些意想不到的异常, 今天看了Winhack的帖子才知道,这种方法在VC中其实是靠不住的。例如下面的代码:try BYTE* pch ; pch = ( BYTE* )00001234 ; /给予一个非法地址 *pch = 6 ; /对非法地址赋值,会造成Access Violation 异常 catch(.) AfxMessageBox( catched ) ; 这段代码在debug下没有问题,异常会被捕获,会弹出”catched”的消息框。 但在Release方式下如果选择了编译器代码优化选项,则VC编译器会去搜索try块中的代码, 如果没有找到throw代码, 他就会认为try catch结构是多余的, 给优化掉。 这样造成在Release模式下,上述代码中的异常不能被捕获,从而迫使程序弹出错误提示框退出。那么能否在release代码优化状态下捕获这个异常呢, 答案是有的。 就是_try, _except结构, 上述代码如果改成如下代码异常即可捕获。_try BYTE* pch ; pch = ( BYTE* )00001234 ; /给予一个非法地址 *pch = 6 ; /对非法地址赋值,会造成Access Violation 异常 _except( EXCEPTION_EXECUTE_HANDLER ) AfxMessageBox( catched ) ; 但是用_try, _except块还有问题, 就是这个不是C+标准, 而是Windows平台特有的扩展。 而且如果在使用过程中涉及局部对象析构函数的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 海上光伏设备选型与采购方案
- 老城区排水管网改造工程项目规划设计方案
- 城乡生活污水提升治理工程规划设计方案
- 十五五规划纲要:生物药生产的交叉污染风险控制
- 2026年蔬菜种植公司市场推广活动策划与实施管理制度
- 2025湖南长沙市轨道交通运营限公司招聘330人(第二批)易考易错模拟试题(共500题)试卷后附参考答案
- 宠物陪伴下的智慧养老策略与实践
- 蓝宝石晶体行业市场进入与退出壁垒分析
- 2025浙江金华义乌市水务建设集团限公司员工秋季招聘16人易考易错模拟试题(共500题)试卷后附参考答案
- 2025江苏扬州市招募50名专项志愿者易考易错模拟试题(共500题)试卷后附参考答案
- 儿童饮食与营养不良的预防与治疗
- 肿瘤营养全程管理方案
- 研修成果汇报展示
- “十五五”住房和城乡建设发展规划
- 境外公司财务管理制度
- 承包毛竹山协议书
- 新疆喀什理工职业技术学院招聘考试真题2024
- HXN5型机车柴油机的总体布置柴油机91课件
- 蜜雪冰城加盟协议合同
- TSG Z7002-2022特种设备检测机构核准规则
- 《精密电子天平使用教程》课件
评论
0/150
提交评论