关于系统资源内存泄露的一些疑问(GDI的对象的正确使用方法)
今天想弄清楚关于GDI的对象的正确使用方法,CBITMAP,CBRUSH等,在一个网站看了些内容,但是有些不明白的地方,希望高手给解答下。原文:http://dev.21tx.com/2004/02/14/16733_1.html
void CMyView::OnPaint( CDC* pDC )
{
CBitmap bmp;
CBitmap* pOldBmp;
bmp.LoadBitmap(IDB_MYBMP);
pOldBmp = pDC->SelectObject( &bmp );
…
if( Something() ){
return;
}
pDC->SelectObject( pOldBmp );
return;
}
原文说这样会导致内存泄露,原因是pOldBmp没有选回来,也没有释放。又说长时间运行,会导致整个系统花屏。
我想弄明白的是pDC->SelectObject( &bmp );究竟是复制了一份呢,还是使用那个指针。
如果是复制,那么最后调用pDC->SelectObject( pOldBmp );同样会造成内存泄露,
如果是使用指针,那么函数执行完的时候BMP就释放了,那还能正常显示图片吗?还有,就算是泄露,我认为也只泄露了一次,也就是第一次的那个pOldBmp没有释放,后面再调用pOldBmp = pDC->SelectObject( &bmp );我认为pOldBmp = NULL;因为上次的BMP已经被释放过了,那么又怎么会导致网上说的“长时间运行,会导致整个系统花屏”?
希望高手给予解答,谢谢