今天在网上看到一篇文章,关于CMFCVisualManager的内存泄露问题( 链接是 http://zhanyonhu.blog.163.com/blog/static/1618604420113208121859/),当然还有其他的关于CMFCButton控件也有内存泄露问题,乱七八糟扯蛋,网上很多的误导文章,写这个澄清一下。

其实他的文章有误导,使用MFC的新特性功能,你的应用程序类CXXXApp是要继承于CWinAppEx,而不是CWinApp,这样就不存在所谓的内存泄露。如果重写了ExitInstance函数,最后也要加一句:

return CWinAppEx::ExitInstance();

附:全文摘录如下

VC 2010的MFC函数,CMFCVisualManager::GetInstance()可能导致内存泄露。对此,VC2010的MFC类库并没有作处理。

导致泄露的代码位置:
\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include\afxvisualmanager.h 的 484行。
static CMFCVisualManager* __stdcall GetInstance()
{
if (m_pVisManager != NULL)
{
ASSERT_VALID(m_pVisManager);
return m_pVisManager;
}
if (m_pRTIDefault == NULL)
{
m_pVisManager = new CMFCVisualManager;                  //内存泄露代码
}
else
{
m_pVisManager = (CMFCVisualManager*) m_pRTIDefault->CreateObject();
ASSERT_VALID(m_pVisManager);
}
m_pVisManager->m_bAutoDestroy = TRUE;
m_pVisManager->OnUpdateSystemColors();
return m_pVisManager;
}
对VC 2010的此问题,可以使用下面的方法修复:
在C××App中,重载虚函数ExitInstance,并加入如下代码:
int C××App::ExitInstance()
{
CMFCVisualManager * pVisualManager=CMFCVisualManager::GetInstance();
if (pVisualManager!=NULL)
{
delete pVisualManager;
}
return __super::ExitInstance();
}

VC 2010的MFC函数,CMFCVisualManager::GetInstance()可能导致内存泄露相关推荐

  1. 在MFC框架下使用osg报内存泄露的解决办法

    作者:朱金灿 来源:http://blog.csdn.net/clever101/ 最近正在学习osg,从osgchina网站下下载了osg的debug版本库,具体地址为: OpenSceneGrap ...

  2. return导致内存泄露。C函数中不要有多次return,以及其解决方法。goto的用法。

    函数中随处return,是造成我们资源泄露和程序死锁的主要根源.很多同志写过类似的代码,函数中创建了和引用了多个资源,中间使用的过程中出错了,程序return,经典的代码是这样的: void fun( ...

  3. VC 2010 安装OpenCV2.4.3

    注意: 下列文档基于VC2010 Express. VC 6.0不被OpenCV 2.4.3支持. VC Express是微软提供的免费版,可从此处下载: VC2010 Express 建议先不要自己 ...

  4. VC 2010学习版使用中的一些问题

    一.新建项目下的文件夹作用: External Dependencies: 工程的外部依赖文件,这个目录是VS自动生成的,你最好别动它. Header Files: 头文件,也就是.h(.hpp)后缀 ...

  5. VC++ inline内联函数的作用解决方案

    VC++ inline内联函数的作用解决方案 __attribute__((always_inline)) attribute((always_inline))的意思是强制内联,所有加了attribu ...

  6. 使用VC 2010制作和使用静态库

    文章目录 1 使用VC 2010制作静态库 2 使用VC 2010使用静态库 1 使用VC 2010制作静态库 创建项目, 选择win32 -> win32项目. 改为release模式: 不使 ...

  7. Installshield 2010 中集成. Net framework4 与 vc++ 2010运行安装包

    1.prq的地址,通过以下地址,下载相应的prq文件 VC 2010 redist X86: http://saturn.installshield.com/is/prerequisites/micr ...

  8. VC++2010配置使用MySQL5.6

    0.前提 安装后的文件概览 编译器:  VC++2010 MySQL版本:MySQL5.6.19 for win64 Connector版本:connector  c++  1.1.3 在VS2010 ...

  9. VC++2010组件安装失败解决办法

    安装SQLSERVER时,安装不上,总是报错说 VC++2010组件安装错误. 单独安装时,也会报出严重错误无法安装.就是下面这两个 最后到网上找到一个办法解决了:如下: 下载这个软件 Microso ...

最新文章

  1. ASP.net的身份验证方式有哪些?分别是什么原理?
  2. IOS操作数据库总结
  3. 如何用python画组合图形_python_matplotlib画组合图
  4. VANSI致力成为全球优质数字资产交易平台的典范
  5. 一个悄然成为世界最流行的操作系统诞生!
  6. 分布式消息系统Kafka初步
  7. Windows7 IIS7下以FastCgi和ISAPI方法安装配置PHP5教程
  8. 机器学习笔记(六):正则化
  9. Android在布局XML中的空格转义符(占位符)
  10. matlab gui教程 计算器,matlab gui编写的计算器程序
  11. .NET Framework 4.8 的 Microsoft 更新目录更新
  12. 百度微软云服务器地址,win10的ie浏览器默认地址被百度劫持
  13. 自己的电脑怎么测网速
  14. android禁止录屏后键盘,怎样取消华为按键录屏功能 | 手游网游页游攻略大全
  15. 程序人生 - 汽车后视镜锁车自动折叠为啥失灵?
  16. 特征变换:特征归一化(Normalization)作用以及方法 Min-Max、Z-Score
  17. 为什么海底捞员工很少离职
  18. 用PS把真人照片转素描手绘效果
  19. windows Apache 的安装和配置教程
  20. 如何下载顺义区卫星地图高清版大图

热门文章

  1. Cisco交换机实现端口安全与帮定
  2. android9系统webview崩溃,Android WebView已开始在Android 9上崩溃
  3. pr抖动插件_2020最全的8000多款PR插件合集,一键安装
  4. html表格右键可编辑,Bootstrap table右键功能实现方法
  5. 蓝桥杯之貌似化学(g背包)
  6. mysql create database to_MySQL中CREATE DATABASE和CREATE SCHEMA区别(转)
  7. ExcelPro《EXCEL图表之道-如…
  8. 【计算机组成原理】定点数的表示和运算
  9. Java中BigInteger的各种方法详解
  10. Codeforces Round #623 (Div. 2, based on VK Cup 2019-2020 - Elimination Round, Engine) A Dead Pixel