关于释放内存

不管是新建文档还是打开另外一份文档,文档对象都是被重复使用的,我们应该在这个时候去释放先前分配的内存。在打开或者新建一个文档时都会调用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学习笔记:第十三讲 (六) 关于释放内存相关推荐

  1. 孙鑫VC++学习笔记(转载至程序员之家--虎非龙)[11--15] .

    第11课 1.创建4个菜单,为其添加消息响应,用成员变量保存绘画类型.添加LButtonDown和Up消息. 2.当窗口重绘时,如果想再显示原先画的数据,则需要保存数据.为此创建一个新类来记录绘画类型 ...

  2. 孙鑫VC++学习笔记(转载至程序员之家--虎非龙)[11--15]

    第11课 1.创建4个菜单,为其添加消息响应,用成员变量保存绘画类型.添加LButtonDown和Up消息. 2.当窗口重绘时,如果想再显示原先画的数据,则需要保存数据.为此创建一个新类来记录绘画类型 ...

  3. 孙鑫VC学习笔记:第七讲

    七.对话框 2006年8月5日 14:25 因为笔记是用OneNote做的,上传以后为看不到图片,于是我截图放到相册上面, 相册地址为:http://photo.163.com/photos/good ...

  4. 孙鑫mfc学习笔记第十四课

    第十四课 网络的相关知识,网络程序的编写,Socket是连接应用程序与网络驱动程序的桥梁,Socket在应用程序中创建,通过bind与驱动程序建立关系.此后,应用程序送给Socket的数据,由Sock ...

  5. 孙鑫VC学习系列教程

    教程简介 1.循序渐进 从Win32SDK编程开始讲解,帮助大家理解掌握Windows编程的核心 -- 消息循环机制. 2.通俗易懂 编程语言枯燥难懂,然而通过孙鑫老师形象化的讲解,Windows和M ...

  6. 视觉SLAM十四讲学习笔记——第十三讲 实践:设计SLAM系统

    1.如何运行示例代码 首先是如何运行示例代码,这里遇到了很多问题: (1)首先要下载Kitti数据集,并在config/default.yaml文件内修改路径. (2)安装Glog.GTest.GFl ...

  7. 孙鑫VC++讲座笔记-(6)菜单编程

    1,弹出菜单(Pop-up)是不能用来作命令响应的. 2,MFC中菜单项消息如果利用ClassWizard来对菜单项消息分别在上述四个类中进行响应,则菜单消息传递顺序:View类--Doc类--CMa ...

  8. 孙鑫MFC学习笔记1.Windows应用程序运行机理

    1.MSG结构 hwnd:窗口句柄 message:消息类型 wParam & lParam:消息的附加信息(比如键值) time:消息被投递的时间 tip:typedef的作用是从变量类型区 ...

  9. mfc编程 孙鑫_孙鑫VC++视频教程笔记-(3)MFC程序框架的剖析 附1-SDI程序流程图

    1,寻找WinMain人口: 在安装目录下找到MFC文件夹下的SRC文件夹,SRC下是MFC源代码. 路径:MFC|SRC|APPMODUL.CPP: _tWinMain(HINSTANCE hIns ...

  10. 线性代数学习笔记——第十三讲——行列式的定义

    1. 一.二.三阶行列式的定义 2. n阶行列式任意元素的余子式与代数余子式的定义 3. n阶行列式的定义 4. 行列式按第一行的展开式 5. 二.三阶行列式适合对角线法则(四阶及四阶以上的行列式一般 ...

最新文章

  1. 一网打尽数据结构中图相关的算法
  2. linux zabbix_agentd命令 监控服务器参数 简介
  3. python学习--for循环详解
  4. LeetCode-链表-面试题 02.07. 链表相交
  5. Mysql 常用函数汇总
  6. 用了fastapi还需要nginx_nginx 与 fastdfs 的配置过程,已经越过了许多坑,我跪着进入了欢迎页面。。。...
  7. 【C++深度剖析教程29】C++对象模型分析下
  8. Mybatis源码分析之(三)mapper接口底层原理(为什么不用写方法体就能访问到数据库)
  9. 如何查阅资料?(找数据集,文献...)
  10. xlrd合并单元格的读取的注意事项
  11. SpringCloud大项目最快速的排查问题的思路
  12. HelloDjango 第 08 篇:开发博客文章详情页
  13. java中连接数据库
  14. 2020 数学建模国赛 B 题参考思路
  15. sz命令获取文件到本地路径设置
  16. 智能算法——蚁群算法
  17. ue4 本地化要点详解
  18. 量子计算机的算力是多少,量子计算机算力有多强?可能是无数平行宇宙中的计算机在同时计算...
  19. 算法第一次作业(2.帐篷问题)
  20. 如何运营一个软件微社区

热门文章

  1. JumpList中Recent类别和自定义类型
  2. Java文件的写入与读出
  3. JVM、JRE、JDK、java ee sdk with jdk四者的区别
  4. .NET应用服务器(中间件)来到
  5. 近些年deep learning在推荐系统的应用
  6. .net通用CMS快速开发框架——问题:Dapper通用的多表联合分页查询怎么破?
  7. 基于16QAM调制的OFDM系统仿真实现
  8. Redis集合 安装 哨兵集群 安全配置 redis持久化
  9. 手把手教你进行R语言的安装及安装过程中相关问题解决方案...
  10. python常用的十进制、16进制、字符串、字节串之间的转换