當用戶未定義一個默認的構造函數,編譯器並不是在任何時候都給自動給我們定義一個默認的構造函數,它只會在編譯器需要的時候才會生成,並且只有class類型的變量會被初始化,其他的諸如內置類型變量或者指針都不會被初始化,這些變量的初始化工作是程序員的責任。
同樣,一個類的默認復制構造函數也不是什麼時候都會由編譯器自動生成,它需要滿足以下幾種情況:
當class內含有一個member object,而這個member object的class聲明有一個copy construct時(不論是合成的,還是自己寫的);
當class繼承自一個base class,而這個base class存在一個copy construt的時候;
當class聲明了一個或多個虛函數(virtual function)的時候;
當class派生自一個繼承串鏈,其中有一個或者多個虛基類(virtual base class)的時候。