C++异常处理(一)

// Normal program statements
...

try

{
// Execute some code that might throw an exception.
}
catch( CException*
 e )
{
//
 Handle the exception here.
// "e" contains information about the exception.

e-> Delete();
}

// Other normal program statements


瞧瞧,代码看上去显得那么整齐、干净,try block和catch block遥相呼应,多有对称美呀!因此主人公初次见面后就一见钟情了。

  为什么要选用异常处理的编程方法?
  当然更为重要的是,C++中引入的异常处理的编程机制提供给程序员一种全新的、更好的编程方法和思想。在C++中明确提出trycatch异常处理编程方法的框架之前的年代,程序员是怎样编写程序的,如下:

 

void main(int argc, char*  argv[])
{
if (Call_Func1(in, param out
)
{
// 函数调用成功,我们正常的处理

if (Call_Func2(in, param out )
{
// 函数调用成功,我们正常的处理

while (condition)
{
//do other job

if  (has error)
{
//
 函数调用失败,表明程序执行过程中出现一些错误,
// 因此必须处理错误 

process_error();
exit();
}
//do other job

}
}
else

{
//  函数调用失败,表明程序执行过程中出现一些错误,
// 因此必须处理错误 

process_error();
exit();
}

}
else

{
// 函数调用失败,同样是错误处理
process_error();
exit();
}


 

因为程序的执行过程中总会遇到许多可预知或不可预知的错误事件,例如说,由于内存资源有限导致需要分配的内存失败了;或某个目录下本应存在的一个文件找不着了;或说不小心被零除了、内存越界了、数组越界了等等。这些错误事件存在非常大的隐患,因此程序员总需要在程序中不断加入if语句,来判断是否有异常出现,如果有,就必须要及时处理,否则可能带来意想不到的,甚至是灾难性的后果。这样一来,程序可读性差了很多,总是有许多与真正工作无关的代码,而且也给程序员增加了极大的工作负担,多数类似的处理错误的代码模块就像满山的牛屎一样遍地都是(程序员不大多是“牛”人吗?所以。。。哈哈)。

  但C++中的异常处理的机制彻底改变了这种面貌,它使真正的计算处理和错误处理分开来,让程序员不再被这些琐碎的事情所烦扰,能关注于真正的计算处理工作。同时代码的可读性也好了。因此我们有理由选择异常处理的编程方法。具体原因如下:
  1、 把错误处理和真正的工作分开来;
  2、 代码更易组织,更清晰,复杂的工作任务更容易实现;
  3、 毫无疑问,更安全了,不至于由于一些小的疏忽而使程序意外崩溃了;
  4、 由于C++中的try catch可以分层嵌套,所以它提供了一种方法使得程序的控制流可以安全的跳转到上层(或者上上层)的错误处理模块中去。(不同于return语句,异常处理的控制流是可以安全地跨越一个或多个函数 )。
  5、 还有一个重要的原因就是,由于目前需要开发的软件产品总是变得越来越复杂、越来越庞大,如果系统中没有一个可靠的异常处理模型,那必定是一件十分糟糕的局面。

  相信绝大多数程序员都知道C++中的异常处理的编程方法,可还是有很多人已习惯原来单纯的面向过程的代码组织方式,不太习惯或较少使用trycatch异常处理。为了使您编写的代码更安全;为了使您编写的代码让他人更易阅读,主人公阿愚强烈建议在您书写的代码中尽可能多用异常处理机制,少一些不必要的if判断语句。

异常的组织
1.将异常组织成层次树状结构,使用继承来实现层次树状结构。这样做的好处是(1) 可以帮助异常的处理,(2)对异常可以进行扩展。
2.在C++中,当异常被抛出时被复制,所以处理器catch中得到的只是原始异常的一个副本,所以要求定义的异常类是可复制的。

异常的处理
1.在catch中进行异常的处理时,最好使用指针或者引用来避免C++中,上溯造型时带来的信息丢失问题。
2.重新抛出异常,形式是throw;
3.捕捉所有的异常使用,形式是catch(...)
4.捕捉异常的顺序是从具体到抽象


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值