C++中编译器必须为未申明constructor的class合成一个default constructor的几种情况

来源:互联网 发布:linux蓝牙传命令 编辑:程序博客网 时间:2024/06/06 04:51

1.带有Default Constructor的Member Class Object: 合成出来的default constructor主要是为了能够调用 Member Class Object的default Constructor


2.带有Default Constructor的Base Class: 合成出来的default Constructor主要是为了能够调用Base Class的default Constructo。 

注:Constructor调用顺序是 先调用Base Class的Constructor,再调用Member Object的Constructor,最后调用自身的Constructor。析构函数调用顺序相反。


3.带有一个Virtual Function的Class:合成出来的default Constructor主要是为了能够正确的初始化每一个Class Object的vptr


4.带有一个Virtual Base Class的class:合成出来的default Constructor主要是为了编译器能安插那些“允许每一个 Virtual Base Class的执行期存取操作”的代码。(这里没明白是怎么回事)



常见误区:

1. 任何class如果没有定义default Constructor,就会被合成出一个来。

2. 编译器合成出来的default Constructor会显示设定class内每一个data member的默认值。

0 0
原创粉丝点击