C++构造函数异常(二)

继续上一篇文章提到的构造异常话题,

第三个场景:对继承中,某个基类构造异常,而其他基类已构造成功,则构造成功的基类不会析构,由编译器负责回收

 1 class B{
 2
 3 public:
 4     B(){
 5         age = 0;
 6         cout << "construct B default" << endl;
 7         throw 0;//抛出异常
 8     }
 9
10     ~B(){
11         cout << "destructor B ,age=" << age << endl;
12     }
13 private:
14     int age;
15 };
16
17 class C{
18 public:
19     C(){
20         //得到指定范围[m,n]的随机数:r = rand()%(n - m + 1) + m;
21         int r = rand()%(8-0)+0;
22         num = r;
23         cout << "constuctor C ,num = " << num << endl;
24
25     }
26     ~C(){
27         cout << "destructor C, num = " << num << endl;
28     }
29 private:
30     int num;
31 };
32
33 class D:public C, public B{
34
35 public:
36     D(){
37         cout << "constructor D " << endl;
38     }
39
40     ~D(){
41         cout << "destrcutor D" << endl;
42     }
43 };
44
45 int main(void){
46
47
48     D d;
49
50 }

class B 默认构造函数抛出异常,而class C 默认构造函数是成功的,但并不会调用C的析构函数,由编译器回收

注释第7行的throw 0后则是下面结果:

第4:智能指针auto_ptr<T>, shared_ptr<T>, T类型构造函数异常,则

时间: 2025-01-03 17:13:21

C++构造函数异常(二)的相关文章

拷贝构造函数(二)——深拷贝与浅拷贝

拷贝构造函数(一)--哲学三连:http://www.cnblogs.com/tenjl-exv/p/8017814.html 拷贝构造函数(二)--深拷贝与浅拷贝:http://www.cnblogs.com/tenjl-exv/p/8017909.html 拷贝构造函数(三)--重载赋值运算符:http://www.cnblogs.com/tenjl-exv/p/8017983.html

异常(二)

五.自定义异常        Java自定义异常的使用要经历如下四个步骤:        1.定义一个类继承Throwable或其子类.        2.添加构造方法(当然也可以不用添加,使用默认构造方法).        3.在某个方法类抛出该异常.        4.捕捉该异常. [java] view plain copy print? /** 自定义异常 继承Exception类 **/ public class MyException extends Exception{ publi

【C++学习之路】派生类的构造函数(二)

二.有内嵌对象的派生类 1.一般来说,我们会这样定义构造函数 student( int i, string nam, int pid, string pnam, int sid) : person( i, nam),parent(pid,pnam){ stuid = sid; } person是基类的构造函数,parent是该派生类内嵌的person子对象   2.具体例子 1 #include <iostream> 2 using namespace std; 3 class A 4 { 5

原型,原型对象,原型链,构造函数,继承(二)

1.prototype(原型对象)有一个属性叫做constructor,constructor默认指向prototype(原型对象)所在的构造函数 2.constructor属性是定义在prototype上的,那就意味着可以被实例对象所继承 3.可以使用hasOwnProperty 方法来验证一个属性是自己的还是继承过来的 4.constructor的作用: 作用一:分辨原型对象到底属于哪个构造函数 instanceof() 作用二:可以从一个实例对象创建另一个实例对象 var Fun = fu

java 异常二

在本程序中,对于除数是-1,也视为是错误的,是无法进行运算的. 那么就需要对这个问题进行自定义的描述. 当在函数内部出现了throw抛出异常对象,那么,就需要给对应的处理动作. 要么在内部try catch处理:要么在函数上声明让调用者处理. 一般情况下,函数内出现异常,函数上需要声明. 如何快速定义异常信息呢? 因为父类中已经把异常信息的操作都完成了. 所以子类只要在构造时,通过super语句将异常信息传递给父类. 那么就可以直接通过getMessage方法获取自定义异常信息了. 自定义异常:

C++构造函数(二)

本篇是介绍C++的构造函数的第二篇(共二篇),属于读书笔记,对C++进行一个系统的复习. 复制构造函数 复制构造函数是构造函数的一种,也被称为拷贝构造函数,他只有一个参数,参数类型是本类的引用.默认构造函数(即无参构造函数)不一定存在,但是复制构造函数总会存在.因为只要没有自己写的复制构造函数,就会自动生成一个复制构造函数,它只是实现了对应成员之间的一一对应的复制.大多数时候这样一个自动生成的复制构造函数是够用的,但是当涉及到"深拷贝"的需求时还是要自己设计复制构造函数. 构造函数不能

赋值、复制构造函数和构造函数 &amp; 异常安全的赋值

异常安全的赋值 需要注意,复制赋值和复制构造,相兼容. 赋值时候,要带上自检查.

java 异常二、

* 编译时异常的抛出必须对其进行处理 * 运行时异常的抛出可以处理也可以不处理 throws和throw的区别 * a:throws * 用在方法声明后面,跟的是异常类名 * 可以跟多个异常类名,用逗号隔开 * 表示抛出异常,由该方法的调用者来处理 public void setAge(int age) throws RuntimeException,AgeboundException{ .............} * b:throw * 用在方法体内,跟的是异常对象名 * 只能抛出一个异常对

走进Groovy (二)

承接上一篇,配置好环境后,开始正式学习语法.我假设看此文的同学至少会一定的JAVA语法,因此一些太过基础的就不记录了,基本上,大家看看示例就明白了. Groovy的卖点之一,就是全兼容JAVA的语法,因此你完全可以从一个JAVA文件中把源代码复制到一个Groovy文件中而不必改写任何一个字直接运行,不过这样在groovy中写JAVA就没意思了,享受不到groovy带来的乐趣了. 一个groovy文件,并非像java文件一样,必须要定义一个类且文件名必须和类名一样,groovy文件中,你可以同时定