[转载]异常抛出(2)throw 、catch_马鸿凯_新浪博客

重新抛出:单个catch不能处理一个异常,需再次抛出

重新抛出机理:中断当前的异常处理器的处理,把异常对象沿函数链继续向上传递。

在一个函数中throw 1;

Catch(int n)

{

n = 2;

throw;  // 重新抛出 抛出的对象还是1,要改变则要catch(int &n),

}

注:重新抛出不会产生新对象

捕获全部异常:

catch(...)

{

// 处理异常}

注:由于最特殊的异常最先出现,所以catch(...)必须列表的最后出现

函数与异常:

(1)异常规格说明

void f()throw(int,char) ;

// 只能抛出int 和 char类型的异常,参数多少可变

 

void  f();

// 可抛出任何一种异常

 

void f() throw();

// 不抛出任何异常

(2)异常安全函数

        将可能抛出异常的代码写在函数前面,让异常在改变数重要数据或状态之前抛出。

注:

在catch块中只能抛出院里的异常,不能抛出新的异常;

抛出异常后,在函数调用链上,一直到正确处理此异常前,会将中间函数的战空间释放,而在有对象的函数中会调用析构函数,因此不可在析构函数抛出异常

遇到catch语句,异常处理就终止,因此catch(...)放在catch块末尾。

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ma_Hong_Kai

微信 2936729162

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值