如:
CPen pen;
pen.CreatePen(...);
如果再次調用CreatePen(...);前沒有用pen.DeleteObject();則會出錯.
CDC的話
建議釋放對象cdc;
用ReleaseDC(&cdc);
我記得以前有個程序沒有釋放,結果打開任務管理器,看到程序所占內存不斷在增,釋放後就解決了。
補充:
理論我知道的不多,我還是舉例說下自己的感覺:
假設妳把這段代碼寫到了壹個按鈕事件裏,如:
OnButton1(){
HDC hdc=GetDC(hWnd);
CDC cdc;
cdc.Attach(hdc);
cdc.TextOut(0,0,"OK");
}
沒有釋放cdc,那麽妳運行程序,打開任務管理器,查看妳程序進程,然後猛點那個按鈕,妳應該會看到內存占用在不斷增加,如果釋放了應該就不會出現這樣的情況,這個是我碰到的情況,至於不釋放會不會有其他情況我也不太清楚.
對於像CPen CBrush 等,假設有如下的代碼:
CBrush br;
br.CreateSolidBrush(RGB(0,0,0));//黑色刷子
...
br.DeleteObject();//釋放br
br.CreateSolidBrush(RGB(255,0,0));//紅色刷子
...
br.DeleteObject();//釋放br
如果不釋放掉那個黑色的刷子,運行br.CreateSolidBrush(RGB(255,0,0));壹句來創建紅色刷子時會出錯.應該就是沒有釋放掉黑色刷子導致的.當然妳可以用兩個CBrush對象br1,br2.
但還是建議用完後用個DeleteObject();