[深度探索C++对象模型] 默认构造函数和拷贝构造函数的构造操作

默认构造函数和拷贝构造函数是C++中的一个重要内容,知道编译器会合成它对编程是很有用的。

首先,什么是默认构造函数?有人说是由编译器合成的构造函数,还有人说是无需参数的构造函数,两种说法都是不正确的。默认构造函数就是调用时无需提供参数的构造函数,因此,它可以是没有参数的,也可以是所有参数都有默认值,当然,两种情况只能采用一种,不然的话,就会产生二义性。

那么:

(1)何时编译器会合成一个默认构造函数?

(2)默认构造函数做什么?

这里需要引入一个词:trivial,意思是无用的。当默认构造函数实际上并没有干什么事时,就称它是trivial,在这种情况下,默认构造函数并没有被合成。因此,只有当编译器认为默认构造函数要干一些有用的事时,它才会合成默认构造函数。而且,这通常都和类成员或者虚函数机制相关,因为要调用其它类的默认构造函数或者做一些虚拟机制的准备工作。


1 当类中的类成员有默认构造函数时

如果类A中含有类成员b,类成员b有默认构造函数,而类A没有定义构造函数,那么,在构造A的对象时默认构造函数就需要调用b的默认构造函数,此时,就会合成默认构造函数,调用b的默认构造函数类构造A的对象。需要注意的是,A的合成的默认构造函数只会调用类成员的默认构造函数,不会初始化其它基本数据类型或者字符串。

如果类A中含有类成员b,类成员b有默认构造函数,而类A定义了构造函数却没有定义默认构造函数,那么,编译器会扩充A的每一个构造函数

你可能感兴趣的:(C++,c++,默认构造函数)