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

来源:互联网 发布:找不到wifi网络 编辑:程序博客网 时间:2024/04/27 18:23

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的默认值”