古詩詞大全網 - 成語查詢 - mfc中的資源釋放問題

mfc中的資源釋放問題

CPen、CBrush或Cfont等壹般通過CreateXXX()來建立,

如:

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();