当用户未定义一个默认的构造函数,编译器并不是在任何时候都给自动给我们定义一个默认的构造函数,它只会在编译器需要的时候才会生成,并且只有class类型的变量会被初始化,其他的诸如内置类型变量或者指针都不会被初始化,这些变量的初始化工作是程序员的责任。
同样,一个类的默认复制构造函数也不是什么时候都会由编译器自动生成,它需要满足以下几种情况:
当class内含有一个member object,而这个member object的class声明有一个copy construct时(不论是合成的,还是自己写的);
当class继承自一个base class,而这个base class存在一个copy construt的时候;
当class声明了一个或多个虚函数(virtual function)的时候;
当class派生自一个继承串链,其中有一个或者多个虚基类(virtual base class)的时候。