我在MFC中从CBitmap派生了一个名为BitmapTools的类。
在其中,一个函数将加载并附加一个位图,如下所示。
bool BitmapTools::LoadAttachBitmap(LPCSTR bmpfile)
{
H_Bitmap = (HBITMAP)LoadImage(NULL, bmpfile, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);
return Attach (H_Bitmap);
}
当类超出范围并被销毁时,是否需要分离位图并调用DeleteObject释放内存?
我在析构函数中添加了以下内容,但从我阅读的内容中,我不确定是否有必要。
BitmapTools::~BitmapTools()
{
this->Detach();
DeleteObject();
}
谢谢,
休
最佳答案
不,您不必-CBitmap源自CGdiObject,其析构函数如下所示:
_AFXWIN_INLINE CGdiObject::~CGdiObject()
{
AFX_BEGIN_DESTRUCTOR
DeleteObject();
AFX_END_DESTRUCTOR
}
DeleteObject();
的实现如下:BOOL CGdiObject::DeleteObject()
{
if (m_hObject == NULL)
return FALSE;
return ::DeleteObject(Detach());
}
因此它会分离并删除所有附加对象。
VS目录中提供了MFC的所有源,以上源均来自旧版本VS2005,但应与较新的源相似。
您应该能够使用调试器进入类和上层类的析构函数-一直按F11。