不存储函数返回的句柄时的内存管理

时间:2013-05-01 11:35:43

标签: c++ winapi gdi handles

如果之前已经回答道歉,我一直无法找到答案。

我正在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)));

是否需要进行任何内存管理,因为我没有将句柄存储到我创建的画笔中?如果是这样,我将如何释放内存?

1 个答案:

答案 0 :(得分:3)

函数CreateSolidBrush无法知道您是如何使用它的。它无法知道您没有存放手柄,因此执行一些自动清理。由于CreateSolidBrush的文档指定您应使用返回的句柄调用DeleteObject,因此您应确保遵守这些要求。

如果您不存储句柄,则会失去对该句柄的访问权限,并且无法确保该对象被销毁。