C++ 中的throw和throw new

 

今天看组里面的老测试代码,很多地方用的是throw new std::exception(),没多想就抄了过来,然后在client端用catch(const std::exception& e)的方式捕获异常。可是在测试案例中触发抛出异常之后,client的catch总是无法捕获,最终程序以未捕获异常退出,十分奇怪。去stackoverflow上搜了下相关话题,原来throw new exception的时候是抛出一个异常的指针,client端需要捕获指针(catch exception* e),而且要负责清理指针指向的资源。而相对的,如果抛出时使用throw exception(不用new),那么捕获的时候用const reference即可。同样,问题解决了,不过想想这两种方式有什么区别和利弊呢?

stackoverflow上的意见是一边倒的,throw new exceptionClass的方法不是一个好主意,因为client需要处理指针指向的资源,在没有足够上下文的情况下这不是很容易的事情。而且处理指针的资源的申请释放工作本身就会有异常风险,遇到了重异常就更糟糕了。相对的,throw execeptionClass的时候,编译器会自动的建立一个异常class的对象,并传导捕获方法的引用中去,而且编译器会负责清理对象所占内存,所以一举两得,throw exception是理想的方案。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值