问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

mfc中的资源释放问题16

发布网友 发布时间:2023-10-25 18:25

我来回答

4个回答

热心网友 时间:2024-11-26 19:09

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

热心网友 时间:2024-11-26 19:10

一般的mfc类对象都是不需要释放的,类中已经在析构函数中释放了,这个不用担心。
但是如果不是使用mfc类对象,而是WinAPI建立的对象,大多数都是需要释放的,具体方式各有不同,可以去MSDN中相关函数的说明。

热心网友 时间:2024-11-26 19:10

你说那些都是关于GDI绘图的,

对于这些重要的就是保存好作图前的资源,一般通过
selectobject()选择与还原GDI设备,这样就保证在你的下一次作图进不影响到你原来的效果

热心网友 时间:2024-11-26 19:11

凡动态分配了存储单元的变量,一旦不用,就要释放。
例如动态数组,不管用new,还是
malloc分配的。就要
delete

free.
这点,你会注意的。
但mfc程序有些地方
动态分配存储单元
对程序员来说,不能“明显看出”。
由于mfc程序是事件驱动程序,有许多子程序(函数)是不断循环执行的。这些
不能“明显看出”的
动态分配,正因为不会自动释放,
才会引起泄漏。
例如
cview
ondraw()里,如果你
建了一个
font,
"画"
完字,不用了,就要释放。
cfont
font;
font.createfontindirect(&lf);
//
这个过程隐含了分配
....
deleteobject(font);
//
不用了,就要释放
例如,
调色盘
logpalette
*plp
=
(logpalette
*)
new
byte[nsize];
....
delete[]
plp;
//
不用了,就要释放
例如,
句柄
handle
hdib
=
ddbtodib(
bitmap,
bi_rgb,
&pal
);
//
这个过程隐含了分配
....
globalfree(
hdib
);
//
不用了,就要释放
mfc程序比较复杂,你的泄漏是怎样引起的,要自己查找。上次有位提问的朋友,就是
cfont
font;
泄漏,没找到毛病所在,觉得复杂,找到了,觉得如此简单。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如何查被录取到的专业 怎样查被录取的专业 录取后怎样查询录取的专业 录取专业怎么查 已被录取怎么查专业 ghs网络语什么意思_ghs网络语意思出处含义介绍 纸箱企业管理软件 ghs什么意思网络(ghs什么意思网络用语) 《喜羊羊与灰太狼》大结局 0与任何数相加都得原数吗? 我才发现我是这么一个人。恨自己。我该怎么办??? 我的车被警察扣了 停在了事故停车场 但停车场管理人员要求把车钥匙留... 彩色打印机(墨水)好用吗?听朋友说,彩色打印机得经常用,否则... 吃食不抢,到老不长的意思72 男朋友因为身边的异性给我聊天给我分手 怎么解释都不会理我 我该怎么... 唐晋,大国崛起作者的资料36 陈乔恩明明很想找对象,但就是找不到合适人选,年龄真的是优质女人在恋爱... 冷藏展示柜温度是多少?24 首先我先讲一下 MMM是金字塔模式 开始赚钱 后来的人不赚 那么什么是金... 微信只知道名字不知道怎么才能加好友?2 手续费交完之后,放款时说银行卡号出错了,要交保证金,写委托书... 佳能打印机2,3个月不用喷墨嘴就堵住了,是不是证明........ 想找对象,为什么却找不到合适的呢 暖气片水的流向是怎样的呢? 急!请翻译一段关于奥运的中文。8 [急]关于奥运的几句话,谁能帮我翻译一下 [英语]4 孩子内八字了怎么办呀?在鞋子里加矫正鞋垫有用吗? 二个手机号怎么注册二个? printf和scanf函数为什么一个要取地址符一个不用呢?46 三星所有手机连接电脑都要下载东西么 已知可以把大地看作均匀的导电介质,其电阻率为a,用一半... 笔记本的散热风扇,风为什么从底面吹出侧面不出1 请专业的人给我做个健身房减肥计划吧,谢谢!!! 我是受了百分之十,转过去说我银行卡信息不对,让我填写委托书改...1 由“吃食不抢,到老不长”引出一件具体故事,大家帮帮,100字...1 你好,我买了一个紫晶吊坠,总质量1.563g,颜色:紫色,形... 吃食不抢,到老不长的意思407 大家知道老话吧,比如“人勤出金山,人懒败家产。”、“吃食不抢...8 吃食不抢,到老不长的意思66 《天天向上》十周年,为什么天天兄弟唯独欧弟没回归?124 ...有点内八字,有没有一套适合我矫正的方法.矫正鞋垫和捆绑带有用吗... 欧弟回归天天向上怎么回事?16 天天向上欧弟回归,谁知道天天向上欧弟回归了是怎么回事? 10 物业能强制有证商家停业吗? 4芯电话线红蓝黄绿,如何与网线插座的1236接口对应。22 男人主动提出分手 有哪些原因?642 农村小麦如何通过网络销售1 如何挂网上销售小麦 有没有男生被女生甩的,进来说说当时女生分手的原因1 魔兽争霸3冰封王座人族如何发展?