深度探索c++对象模型 学习笔记 chapter2-1 default constructor

Default Constructor
如果一个类没有显式声明默认构造函数,那么会有一个默认构造函数会为了编译器需要被隐式声明出来。
在如下四种情况:
【1】带有default constructor 的Member class object
【2】带有default constructor 的Base class
【3】带有一个virtual function 的class
【4】带有一个virtual base class的class
会有一个默认构造函数会为了编译器需要被隐式声明出来。
其他情况且没有任何构造函数的类,拥有的是implicit trivial default constructors,实际上并不会被合成出来。
为了编译器的需要是指“调用member object或base class的default constructor”或是“为每一个object初始化其virtual function机制或virtual base class机制”而完成。
在合成的default constructor中,只有base class subobjects和member class objects会被初始化。其他nonstatic data member的初始化需要由程序员保证。
如果程序员已经为此定义了构造函数,则编译器会在其中添加对base class subobjects和member class objects的初始化代码。

两个误解:
1:任何class如果没有定义default constructor,就会被合成出一个来
2:编译器合成出来的default constructor会明确设定“class内每一个data member的默认值”

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值