孙鑫VC学习笔记:第十三讲 (六) 关于释放内存

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

关于释放内存

不管是新建文档还是打开另外一份文档,文档对象都是被重复使用的,我们应该在这个时候去释放先前分配的内存。在打开或者新建一个文档时都会调用Cdocument::OnOpenDocument方法,而这个方法又会调用DeletContents成员函数删除文档数据,该函数在文档被销毁之前或文档被重复使用之前被调用,用来删除对象的数据(但并不消除对象本身),从而确保文档数据是空的。这对于一个单文档应用程序来说尤其重要,因为单文档应用程序只使用一个文档。

---------------------------------------------------------------------------------

前面我们在CGraphicView::OnLButtonUp方法中用new方法在堆中分配了一个内存:

CGraph *pGraph =new CGraph(m_nDrawType,m_ptOrigin,point);

现在来看看如何释放这个对象内存:

1.首先在CGraphicDoc中添加一个虚函数:DeletContents()

2.然后在CGraphicDoc::DeleteContents()方法中去释放pGraph指向的内存。

 


  注意:

1.CDocument::DeleteContents()会在打开、新建、关闭文档时被调用

2.CObArray::RemoveAt 方法将队列中从指定位置开始移除一个或多个元素,然后将该位置以上的元素下移,从而导致数组中数据的重排。在上面的代码中,m_obArray对象从第0个位置开始移除,移一次后面的元素下移一个单位,当然nCount数目也应该相应地减少一个,但是上们的nCount并不会减少,所以会出现错误。把代码改成下面的代码就不会出现非法操作。

 
孙鑫VC学习笔记第十三 关于释放内存 关于释放内存不管是新建文档还是打开另外一份文档,文档对象都是被重复使用的,我们应该在这个时候去释放先前分配的内存。在打开或者新建一个文档时都会调用Cdocument::OnOpenDocument方法,而这个方法又会调用DeletContents成员函数删除文档数据,该函数在文档被销毁之前或文档被重复使用之前被调用,用来删除对象的数据(但并不消除对象本身),从而确保文档数据是空的。这对于一个单 阅读详情

相关推荐

MFC 控件清除内存

MFC 树控件表控件时内存总是占用的非常的大。 注意,这里已经排除了内存泄露的问题,因为没有进行任何的new 和 delete。 其实CListControl占用的内存已经没用了,但是Windows没有立即释放,而是暂存在程序堆里,以便如果下次再用的时候可以立即提供而不必再申请。 ::SetProcessWorkingSetSize(GetCurrentProcess(), -1,...

qq_42095701的博客 1251

MFC中常用的内存分配及释放函数

<br />在MFC中,用后可以使用多种方法来分配和释放内存空间,下面给出经常使用的内存分配和释放的函数,如下表所示。<br /> <br />内存分配函数                                        内存释放函数<br />GlobalAlloc                                         GlobalFree<br />LocalAlloc                                           Local

Code Captain的专栏 3855

MFC关于VS2013内存释放的定位

全部在App中完成 1.在 App.h 头文件声明 #ifdef _DEBUG protected:       CMemoryState m_msOld, m_msNew, m_msDiff; #endif  // _DEBUG   2.在 App::InitInstance() 中添加如下代码: #ifdef _DEBUG       m_msOld.Ch

金属服务,美好生活,天网改变世界,华帝量子科技。 2001

孙鑫老师总结的vc小知识

孙鑫老师总结的vc小知识 收藏转自程序员之家论坛。下面的知识都是孙鑫老师总结的一些常见问题和解决方案。转载自此处以备查学。VC小知识总结()(1)当文档被修改时,如何在标题上加上标志'*'?重载CDocument类的虚函数virtual SetModifiedFlag:void CTest2Doc::SetModifiedFlag(BOOL bModified){    CString strT

tony的专栏 2743

孙鑫VC学习笔记第十三 () 生成可串行化的类

479

孙鑫VC第五课学习笔记

孙鑫VC第五课学习笔记文本编程知识点一使用CreateSolidCaret( int nWidth, int nHeight )在文本编辑器中可以创建插入符,这边提到了如果函数的两个参数都设置为0,系统将默认采用窗口边框的高和宽。那么如果知道窗口边框的高和宽,在MSDN中有这样的说明:The system’s window-border width or height can be r

张戟的专栏-H.264学习乐园 6424

孙鑫VC学习笔记:第一

到现在才学VC,感觉太晚了; 到现在才看孙鑫VC视频教程,感觉太菜了。在这高手云集的地方,写这些东西有点让人发笑。唉,现在也不需要什么脸皮了,写就写吧,做下一些记录,以后可以看看自己是怎么成长的。希望有菜鸟们一起来学习,交流,更希望有大师指点指点,发发评论什么的!本来笨鸟要先飞的,我这笨鸟却这么晚才起飞,大家都飞出好远了,我唯有加倍的努力了!至于学习方法,还得请各位多多指教。下面开始我的教程:

遐迩思的专栏 2593

孙鑫VC学习系列教程

教程简介 1、循序渐进  从Win32SDK编程开始解,帮助大家理解掌握Windows编程的核心 —— 消息循环机制。 2、通俗易懂  编程语言枯燥难懂,然而通过孙鑫老师形象化的解,Windows和MFC编程中的难点、重点,让你轻松掌握。 3、实战性强  编程中要注意什么?如何阅读出错提示?如何调试运行程序?如何排查错误,解决问题?通过孙鑫老师的一步步操作解,带你迅速掌握程序

学如逆水行舟,不进则退 1818

孙鑫C++视频教程

(注意以下为FTP下载地址,建议使用迅雷等下载工具下载,全20CD,已添加完整) 孙鑫C++教程(全20)PPT义.rar 孙鑫C++教程01.rar 孙鑫C++教程02.rar 孙鑫C++教程03.rar 孙鑫C++教程04.rar 孙鑫C++教程05.rar 孙鑫C++教程06.rar 孙鑫C++教程07.rar 孙鑫C++教程08.rar 孙鑫C++教程0

又见炊烟 6277

孙鑫C++教程(全20

(注意以下为FTP下载地址,建议使用迅雷等下载工具下载,全20CD,已添加完整)孙鑫C++教程(全20)PPT义.rar孙鑫C++教程01.rar孙鑫C++教程02.rar孙鑫C++教程03.rar孙鑫C++教程04.rar孙鑫C++教程05.rar孙鑫C++教程06.rar

http://www.softwareace.cn 王牌软件 2505

VC深入详解(孙鑫笔记)自学必备

VC深入详解(孙鑫笔记)自学必备

j416066989的博客 334

孙鑫VC学习笔记:第七

七、对话框 2006年8月5日14:25因为笔记是用OneNote做的,上传以后为看不到图片,于是我截图放到相册上面,相册地址为:http://photo.163.com/photos/goodmoood/61588745/   如何创建一个对话框1.先插入一个对话框,对话框本身也是一个窗口Insert->resouce 2.我们需要

遐迩思的专栏 5984

孙鑫VC学习笔记:多线程编程

孙鑫VC学习笔记:多线程编程 孙鑫VC学习笔记:多线程编程 SkySeraph Dec 11st 2010  HQU Email:zgzhaobo@gmail.com    QQ:452728574 Latest Modified Date:Dec.11st 2010 HQU ========================================

浮城大亨的专栏 2479

孙鑫VC学习笔记第十三 () 设置文档标题

设置文档标题:前面我们过如何去修改一个程序的图标(在CMainFrame类中)、光标、背景(在View类中),没有如何修改程序的标题(在前面两个类中都修改不了)。方法一: 在程序启动的时候,会调用OnNewDocument创建一个“无标题”文档, 所以我们可以在这个方法中调用CDocument类的SetTitle成员函数修改标题。方法二:  也可以在String Table中修改标题,

梦想---软件设计师 1043
上一篇: 孙鑫VC学习笔记:第十三讲 (五) 保存可串行化的类对象 如何获取文档与视类指针
下一篇: 孙鑫VC学习笔记:第十四讲 (一) 网络的基本概念
Savitch
博客等级 码龄15年 84粉丝 130原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值