为什么最好以引用方式捕捉异常

捕捉异常的方式有三种:值传递、引用、指针

引用与值传递相比:

1.值传递会复制两次,传给catch时,抛出时都会复制。引用只复制一次,效率大大提高。

2.值传递会带来切割问题。当传递派生类对象给参数是基类对象的catch时,会导致切割,即派生类的派生类成员被切割,

只留基类的部分。

引用与指针相比:

1.抛出指针时,不需要复制对象,只需复制指针,效率增加,但是,不能抛出指向局部对象的指针,因为函数调用完毕,局部对象被

销毁。

2.抛出指向堆对象的指针时,new完之后没办法delete,因为没有办法知道传来的是全局对象或者static 对象或者是堆上的对象,所以,delete or not delete这就成一个问题了。

3.catch-by-pointer和语言本身建立起来的惯例有所矛盾。4个标准的异常:

<1>:bad_alloc 当operator new无法满足内存需求时抛出。

<2>:bad_cast 当对一个对象实行向下转换(dynamic_cast)失败时抛出。

<3>:bad_typeid 当dynamic_cast被实施与一个null指针时抛出。

<4>:bad_excepition 适用于未预期的异常情况。

综上:引用是最好的选择,它不会产生上述问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值