注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

多多的爹

 
 
 

日志

 
 

C与C++的异常处理 3  

2007-07-12 19:28:51|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
第三部分:C++标准异常体系
C++标准异常体系虽然只有三个关键字,但这三个关键字却完全涵盖了所有异常处理。
try关键字包含了可能出现异常的语句。但凡try中的语句,无论普通的c++语句,还是调用的函数,只要出错,都会被捕获。
语法如:
try
{
 ......
}
catch关键字则有过滤异常类型和处理异常的功能了。catch后的小括号内包含了异常类型的判断,通常为某个类型或者类,或者是通用的...。紧跟着的大括号则是对异常的处理代码了。一个try后面可以跟上多个catch,每个catch捕获一个异常
语法如:
try
{
 ......
}
catch(int i)    //捕获类型为int的异常
{
}
catch(CNullException* pe)  //捕获指针为空的异常
{
}
catch(...)    //捕获所有的异常
{
}
异常处理后,如果继续,则程序从catch外最近的语句开始往下执行
throw关键字有两大作用。第一是跟在函数声明后面,定义此函数可能抛出的异常类型,当然也可以用空括号表示此函数不抛出任何异常。在VC8中,此作用仅仅是一个约定,无论是编译,还是执行,都不会对函数中的异常有多大约束。
语法如:
void Reverse()throw()   //不会抛出异常
{
}
void Connect()throw(int, CNullException) //可以抛出这两种异常
{
}
throw的另一个作用就是抛出异常了。
语法如:
throw 5;
CNullException e;
throw e;
第四部分 对象,new,delete在异常处理
Robert Schmidt是一个非常啰嗦的人,关于new,delete,和对象的异常处理,竟然花了5到11章的篇幅说明,真是又臭又常。关于这部分内容,说说我个人对此的意见。
对于new操作,只需要判断是否成功就可以了,即返回值是否不为NULL。也就是说,只需要关注内存不够的情况。
delete完全无需关注。
对于对象中的构造函数,在其中不要加入任何会导致异常的错误。如果有需要预设置的东西,可以创建一个Init的函数,在对象创建出来后,再调用就行了。这样在new对象过程中,是很难出现异常错误的。
按照上面所以的办法去做,可以不再关注new,delete和对象的创建
第五部分 垃圾内容
本书的剩余部分,在我看来完全是垃圾了。在学习template的时候,我就一直在感叹,为什么会有那么多人对简单的,一目了然的东西那么不屑一顾,偏偏要搞得那么复杂。如果一个语法比较晦涩,一个用法使用有危险,为什么还要用呢?就如书后面的内容,把大部分的精力都放到很多人可能一辈子都不会用到的地方,花了80%的精力写了一个只会有20%的人(其实更少,想想会有多少人会去重载new,delete操作符)使用的东西,真是一种悲哀。
  评论这张
 
阅读(15)| 评论(2)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017