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

来源:互联网 发布:广联达软件教学视频 编辑:程序博客网 时间:2024/06/06 04:15

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

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

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

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

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

3. 当前类中有虚函数

4. 当前类有虚基类


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


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


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


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


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


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



0 0