【转载】http://issf.blog.163.com/blog/static/1941290822009111894413472/
最近用GDI+实现了几个自定义控件,但是发现存在内存泄露问题
BOOL CGdiplusBugDlg::OnEraseBkgnd(CDC* pDC)
{
Image* pImage
= Image::FromFile(L"E:\\bac.bmp");
Graphics g(pDC->m_hDC);
g.DrawImage(pImage,0,0);
return TRUE;
}
因为没有
delete pImage;
g.ReleaseHDC(pDC->m_hDC);
而这两个操作最好加上,否则肯定会泄露!
就造成了大量的内存泄露。也是奇怪了,在那么多的例子里也都没见去delete gdi+的资源。在网上搜了很久也没有搜到这方面内容。
最初的时候就觉得gdi+不用释放内存太奇怪了,但又没看见它在哪里new了。Image::FromFile直接返回一个指针也是特别奇怪..但MSDN里中居然也不说要去delete.
Bitmap 继承 Image, Image继承 GdiplusBase,在GdiplusBase里面发现了一些东西...
class GdiplusBase
{
public:
void (operator delete)(void*
in_pVoid)
{
DllExports::GdipFree(in_pVoid);
}
void* (operator
new)(size_t in_size)
{
return DllExports::GdipAlloc(in_size);
}
void
(operator delete[])(void*
in_pVoid)
{
DllExports::GdipFree(in_pVoid);
}
void* (operator
new[])(size_t in_size)
{
return
DllExports::GdipAlloc(in_size);
}
};
【转载】gdi+ 内存泄漏,码迷,mamicode.com