-
如果没有任何用户定义的构造函数,会隐式申明一个默认构造函数,但是这个默认构造函数是无用的。
-
只有当编译器需要的时候才会产生一个默认构造函数。
-
只有下面的四种情况,才会产生有用的默认构造函数
-
1、如果一个类没有任何构造函数,但是这个类有一个类成员对象,这个类成员对象含有默认构造,那么这个类的隐式默认构造就是有用的。
-
如果用户定义了默认构造函数,并且类内含有1个或一个以上的member class object对象,那么编译器将会扩充用户定义的默认构造函数,在其中调用member class object的默认构造函数。并且调用顺序按照object的声明顺序。
-
这些被扩充的代码将插入在用户定义的代码之前
-
-
2、如果一个类没有任何构造函数,这个类派生自一个默认构造函数的基类,那么将会产生有用的隐式默认构造函数
-
如果含有多个基类,那么按照声明顺序调用默认基类的默认构造函数
-
如果用户定义了多个构造函数,那么编译器将会扩充这些构造函数,而不会生成合成的默认构造函数(隐式的构造函数),在其中调用基类的默认构造函数。
-
-
3、带有一个虚函数的类
-
包含以下两种情况,1、类声明或者继承一个虚函数。2、类派生自一个继承串链,其中含有一个或者多个虚基类。
-
合成的默认构造函数将会做以下两件事情。1、生成一个virtual function table,其中存放类的virtual functions。2、在每一个类对象中&#x
-
-