此問題與this one有關。從POD繼承的類中的默認構造函數的奇怪行爲結構
正如我在前面的問題中提到的,我決定從Win結構BITMAP繼承我的類以提供一些擴展功能。
我注意到編譯後的程序行爲中的興趣細節。首先,我已經定義了默認構造我的類象下面這樣:
CPreviewFrame::CPreviewFrame():
m_bufferSize(0)
{
bmBits = NULL; //ensure that compiler in debug won't init it with 0xccccc... and delete[] will do the job
}
在想法編譯器必須生成代碼,要求基類型的默認構造函數,即使它不是在初始化列表中手動調用。但是在調試時我注意到BITMAP的數據成員沒有初始化!我加手動初始化位圖和它的工作 - 所有數據成員被初始化零:
CPreviewFrame::CPreviewFrame():
BITMAP(),
m_bufferSize(0)
{
//bmBits = NULL; //it's not needed anymore probably
}
它爲什麼會發生?編譯器是否有義務調用默認構造函數或僅將它應用於類? (它不能這樣我想 - 唯一的區別在於成員和繼承的默認訪問限定符)