![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
异常
文章平均质量分 76
阿华Go
做一个有责任心有上进心的汉子,我要肩负起守护家人的重任!!!
展开
-
C++之不要让异常逃离析构函数(8)---《Effective C++》
条款8:别让异常逃离析构函数;我们先来参看如下代码:class A{public: ... ~A(){...}};void showA(){ std::vector<A> v; ...}考虑如下问题,当showA函数调用结束时,vector v这个局部变量需要被销毁,他讲负责销毁所有的A,加入v中有n个A,第一个A调用的时候发生异常,其他n-1个对象还是应该被原创 2017-07-19 15:07:21 · 234 阅读 · 0 评论 -
C++在构造函数中防止资源泄露(9)---《More Effective C++》
C++的构造函数不仅包括申请内存空间的过程,同时也包括了调用构造函数的过程。试想一下,如果在构造函数使用过程中,抛出异常,会发生什么情况呢?一个异常被抛出,可能是因为operator new不能给AudioClip分配足够内存,也可能是Audio构造函数自己抛出一个异常,无论什么原因,这都会导致对象没有被创建成功,因此析构函数不会被调用,因为C++仅能删除完全构造的对象。那么我们通过删除指针对象的方原创 2017-09-02 14:47:25 · 470 阅读 · 0 评论 -
C++之禁止异常信息传递到析构函数外面(10)---《More Effective C++》
C++中禁止异常传递到析构函数外面有两个原因:1)异常转递的堆栈辗转开解的过程中,防止terminate函数被调用;2)能够帮助确保析构函数总能完成我们希望它完成的动作。C++中有两种情况下会调用析构函数:1)正常情况下删除对象,如对象超出作用域或者对象指针被显示delete掉; 2)异常传递的堆栈辗转开解(stack-unwinding)过程中,由异常处理系统删除一个对象。 在上述两种情况下,原创 2017-09-02 16:25:51 · 299 阅读 · 0 评论 -
C++中理解“抛出一个异常”与“传递一个参数”或“调用一个虚函数”间的差异(11)---《More Effective C++》
这篇博客中我们主要讲述将对象出阿迪给函数或者对对象调用虚拟函数以及将一个对象作为异常抛出,之间的三个主要的区别: 1)异常对象那个在传递时总被进行拷贝:通过传值方式捕获时候拷贝了两次; 2)对象作为异常被抛出与作为参数传递给函数相比,前者类型转换比后者类型转换要少一些; 3)catch子句在进行匹配的时候是有顺序的,因此我们需要将子类异常放在上面,基类异常出现在下面。综述:我们传递参数或者异常原创 2017-09-02 21:34:03 · 432 阅读 · 0 评论 -
C++之通过引用(reference)捕获异常(12)---《More Effective C++》
我们知道传递异常到catch子句中的方式有三种选择:1)通过指针传递;2)通过传值传递;3)通过引用传递。一、通过指针传递:从throw处传递一个异常到catch子句是一个漫长的过程,理论上说这个过程通过指针传递效率最高,因为指针传递不会进行异常的拷贝,然而我们经常却不用指针传递,为什么呢?下面我们先来看一个例子:class exception{...};void someFunction(){原创 2017-09-03 11:35:09 · 1112 阅读 · 0 评论