GDI中循环调用CreatePen是否会造成内存泄露吗?

hPen=CreatePen(PS_SOLID,1,RGB(0x50,0xa0,0xa0));这句有没有反复生成对象。把这句放到循环中会造成内存泄露吗不进行DeleteO... hPen = CreatePen(PS_SOLID,1,RGB(0x50,0xa0,0xa0));
这句有没有反复生成对象。把这句放到循环中会造成内存泄露吗
不进行DeleteObject(hPen);
是否会造成内存泄露。
环境C++,Win32,GDI
展开
 我来答
白度管理08
2012-01-06
知道答主
回答量:21
采纳率:0%
帮助的人:3.4万
展开全部
会,不过这不叫内存泄露,叫做GDI资源泄露。
泄露的多了会造成你的程序再也获取不了新的GDI资源,CreatePen会调用失败。程序的显示也会不正常甚至崩溃。
GDI句柄属于用户句柄,如画笔、画刷、窗口、图标、光标、字体等
另外还有种是内核句柄,如文件句柄等
总之你调用这些创建/打开函数获取的句柄都被Windows登记在册了,如果你不删除/关闭将最终耗完你的程序能使用的资源。其它也没什么好深究的。
何处淬吴钩
2012-01-06 · TA获得超过5045个赞
知道大有可为答主
回答量:2947
采纳率:50%
帮助的人:2418万
展开全部
会的。对于会频繁用到的诸如需要new,create之类的对象,最好弄个全局的。因为频繁申请释放内存会造成程序效率降低,出错率提高,而且会造成内存碎片问题。总之坚持一个原则,在保证代码可读性的前提下,能用一个变量不要用多个变量,能用全局变量或临时变量不要用动态变量。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-01-06
展开全部
CreatePen后要删除的,不然会造成隐式内存泄露
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友9308069
2012-01-07 · TA获得超过1万个赞
知道大有可为答主
回答量:3947
采纳率:89%
帮助的人:1937万
展开全部
反复调用确实会每次生成1个GDI对象,
winxp默认每个进程最高支持1万个GDI对象。
达到之后将无法生成新对象

文档上说
“When you no longer need the pen, call the DeleteObject function to delete it.”
不需要时就要删除。

DeleteObject可以删除创建的对象,也可以删比如像WHITE_PEN这样的stock预置对象,但不会有效果。
来自:求助得到的回答
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
源语梦Hg
2012-01-06 · TA获得超过521个赞
知道小有建树答主
回答量:670
采纳率:100%
帮助的人:275万
展开全部
对于windows这些handle,是由windows来管理的,可以说是有限的资源。所以最好 不要循环太多次,尤其是长时间跑的程序。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式