[GDI]能不能删除当前被SelectObject()选进的对象??
在《windows游戏编程大师技巧》一书中有这么一句话:
销毁画笔时应当非常小心.如果要删除一个当前正被选定的对象,或者选定一个当前已被删除的对象,将发生错误...
也就是说,在删除一个正在被选定的对象之前,一定要恢复之前返回的旧对象,即把旧对像再选进去,然后再进行删除.
但是,在我所知道的一些开源库里,比如字体对象:
SelectObject(m_FontDC,m_FontBmp);
他的整个代码,都没有保存旧对象,而且人家删除的时候,也不会有什么问题,
我自己的测试也是如此,比如:
HBRUSH brush = ::CreateSolidBrush(0);
SelectObject(g_hMemoryDC, brush);
if (::DeleteObject(brush)) // 经测试,这里返回的是TRUE
int ok = 0;
这样做,并不会有问题.
请问,到底应该听谁的? 到底要不要保存旧对象,最后对其做恢复选定??
[解决办法]
你看看内存有没有泄漏。
我也是不保存原来的,没啥内存泄漏。
不过经常看到有人发帖说泄漏,泄漏。
但是俺不搞服务器程序,小泄漏也无所谓。泄漏几个字节问题不大。