C++标准中这么说:
对于类X,如果没有任何用户定义的构造函数,那么就会有一个默认构造函数被暗自声明出来;这种函数一般没有什么用。。。
不过实际上不是什么时候编译器都生成默认构造函数,但下面集中情况却一定会为我们生成默认构造函数:
1.类A中包含一个成员是另外一个类B,如果类B定义了默认构造函数。这个时候如果类A没有定义默认构造函数,编译器会暗自生成一个默认构造函数来调用调用类B的构造函数来初始化它。
2.类A从类B继承,类B带有默认构造函数,那么这个时候编译器会为类A合并默认构造函数来调用类B的默认构造函数。
3.类A中包含虚函数;如果类A没有定义默认构造函数,编译器会为类A合并默认构造函数,其目的是初始化虚函数表,这是因为C++的虚函数表是在运行的时候生成的,而这就是在每个类被初始化的时候。
4.如果类A是虚继承其基类B,编译器会为类A及其子类合并默认构造函数来初始化而定义偏移地址。
这里还加一条:
对于后面三点,如果类C中包含这样的类A,同1一样,编译器会合并默认构造函数。