【发布时间】:2011-11-25 05:08:07
【问题描述】:
如您所知,如果没有手动定义,编译器会为 POD 结构定义默认构造函数、复制构造函数、赋值运算符和析构函数。通常(或者我应该一直说)这是一个复制操作。所以我决定从 Win 结构 BITMAP 继承我的类,以在构造函数中提供内存分配并在析构函数中释放。我没有使用组合,因为我想允许将它与一些 WinAPI 函数一起使用。下面是一段代码:
class CPreviewFrame : public BITMAP
{
public:
CPreviewFrame( );
CPreviewFrame( std::size_t width, std::size_t height, UCHAR bytesPerPixel = 3 );
CPreviewFrame( const CPreviewFrame& frame );
~CPreviewFrame( );
.....
};
复制构造函数是这样定义的:
CPreviewFrame::CPreviewFrame( const CPreviewFrame& frame ):
BITMAP( static_cast<BITMAP>(frame) ), //question is here
m_bufferSize( frame.m_bufferSize )
{
bmBits = new uint8_t[ m_bufferSize ];
memcpy( bmBits, frame.bmBits, m_bufferSize );
}
所以我的问题是:从继承的结构中调用编译器定义的复制构造函数是正确的方法,还是应该在构造函数主体中手动复制所有字段?这两种变体对我来说看起来有些奇怪,因为 POD 结构不能有构造函数,尽管编译器定义了它们。如果根据定义不存在 POD 数据类型的构造函数,如何调用它?
附:上述代码在 VS2010 上编译良好。
P.P.S.我here发布了与这个主题相关的问题。
【问题讨论】:
标签: c++ copy-constructor