2013-05-01 58 views
0

如果之前已回答過此問題,我一直無法找到答案。不存儲處理時的內存管理函數返回的句柄

我在我的Win32應用程序中做了一些繪畫,並且有很多場景我只需要繪製一個對象(例如矩形)一次。目前,我正在創造這種刷子的方法如下:

HBRUSH sampleBrush = CreateSolidBrush(RGB(1, 119, 158)); 
SelectObject(myDC, sampleBrush); 
// Do some painting on DC using brush 
DeleteObject(sampleBrush); 

創建刷,商店手柄,選擇到DC,使用刷子,釋放內存。

但是,如果我做以下代替:

SelectObject(myDC, CreateSolidBrush(RGB(1, 119, 158))); 

會不會有,因爲我不是存儲句柄創建刷所需的任何內存管理?如果是這樣,我將如何釋放內存?

+2

你不能這樣做,你扔掉HBRUSH,所以你泄漏它,因爲它永遠不會被清理 – paulm 2013-05-01 11:38:11

+0

注意到。感謝您的明確答案! – BeneGal 2013-05-01 11:47:37

回答

3

函數CreateSolidBrush無法知道您是如何使用它的。它不知道你沒有存儲手柄,因此執行一些自動清理。由於CreateSolidBrush的文檔指定您應該致電DeleteObject並返回句柄,因此您應確保遵守這些要求。

如果您沒有存儲句柄,那麼您將無法訪問它,並且無法確保該對象被銷燬。

+0

這很有道理,謝謝你清理它。我沒有足夠的聲望來讚揚你,但如果我能的話,我會! – BeneGal 2013-05-01 11:47:12

+1

+1代表@BenGal – Charlie 2013-05-01 11:51:22

+1

並且還可以選擇您選擇的筆刷(回到DC)(當您選擇筆刷時),否則可能會漏水。 – Deanna 2013-05-01 12:51:23