在孫鑫的《VC++深入詳解》一書中,看到了這部分內容:
/////////////////////////////////////////////////////////////////////////////////////////
在網友backer的幫助下,我們參看了ANSIC++的ISO標準,並從彙編的角度試驗了幾種主流編譯器的行爲,對於編譯器提供默認構造函數的行爲得出下面的結論:
如果一個類中沒有定義任何構造函數,那麼只有以下三種情況時,編譯器纔會提供默認構造函數:
1、如果一個類中有虛擬成員函數或者虛擬繼承父類(即有虛擬基類)時;
2、如果類的基類有構造函數(可以使用戶定義的構造函數,也可以是編譯器提供的默認構造函數);
3、在類中的所有非靜態的對象的數據成員,他們所屬的類中有構造函數(可以使用戶定義的構造函數,也可以是編譯器提供的默認構造函數);