在类没有显示声明构造函数的情况下,编译器并不总是为我们自动生成默认构造函数,以下4种情况,编译器才会为我们自动生成默认构造函数:
1.类中有一个类成员含有默认构造函数的,编译器会为该类自动生成默认构造函数,自动插入代码,调用该成员的构造函数;
2.基类中含有默认构造函数,编译器会为该类自动生成默认构造函数,自动插入代码,调用基类的构造函数;
3.类中含有虚函数时,由于编译器要为该类生成虚函数表vtable,并为该类的对象生成指向该vtable的vptr,所以需要为该类合成默认构造函数;
4.虚继承时;
除了这四种情况,编译器不会为我们自动生成默认构造函数,例如类中的整数、指针、数组等,因为这些成员的初始化对编译器来说都不是必要的,所有都不会自动被初始化,这些成员的初始化需要程序员自己显示编写代码实现;