C++默认构造函数在需要的时候被编译器构造出来 解析

C++默认构造函数在需要的时候被编译器构造出来:

关键在:在需要的时候。而这个需要的时候说的是编译器需要的时候,并不是程序员需要的时候。

默认构造函数构造的时机是:

1. 有类成员对象,该对象所属类有默认构造函数

2. 当前类为派生类, 该类的基类有默认构造函数

3. 当前类中有虚函数

4. 当前类有虚基类


在第一种情况下:默认构造函数只会将类成员对象按照其默认构造函数构造,而不会去初始化该类的非静态数据成员。因为对非静态数据成员的初始化对程序员来说是需要的,但是对编译器来说,并不是必须的。


第二种情况:根据基类的声明顺序,将会在派生类的构造函数之中,依次调用基类的默认构造函数


第三种情况:需要将该类的虚表构造出来,并且将虚表所在的位置放在类对象的虚表指针中


第四种情况:需要产生一个指针指向虚基类。因为虚基类的机制是:在多重继承中,虚基类只有一个拷贝,所以需要在派生类中有指向该基类所在的地址。


当程序员自己定义了默认构造函数时:那么1-4情况中需要的构造过程会扩张到程序员定义的默认构造函数中。


如果程序员自己定义了构造函数,那么编译器不再会合成默认构造函数,而是把1-4种情况中需要的构造过程扩张到程序员定义的构造函数中。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值