这个问题与这个有关。
正如我在上一个问题中提到的,我决定从 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 的数据成员没有初始化!我为 BITMAP 添加了手动初始化,它起作用了——所有数据成员都用零初始化:
CPreviewFrame::CPreviewFrame():
BITMAP( ),
m_bufferSize( 0 )
{
//bmBits = NULL; //it's not needed anymore probably
}
为什么会这样?编译器不是有义务调用默认构造函数还是仅应用于类?(我认为不可能如此 - 唯一的区别在于成员和继承的默认访问限定符)