我在从CBitmap派生的MFC中有一个名为BitmapTools的类。
在其中,一个函数加载并附加一个Bitmap,如下所示。
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();
}
谢谢,
休
答案 0 :(得分:1)
不,你没有 - 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());
}
因此它会分离并删除任何附加的对象。
MFC的所有资源都可以在VS目录中找到,上面的资源来自旧版VS2005,但应该与新版本类似。
您应该能够使用调试器进入类和上层的析构函数 - 只需按F11。
答案 1 :(得分:0)