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是理想的方案。

原文链接: https://www.cnblogs.com/lx20030303/archive/2012/10/02/2710068.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    C++ 中的throw和throw new

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/64396

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 上午11:26
下一篇 2023年2月9日 上午11:27

相关推荐