DestroyWindow内存并么有变小,为什么?

我做了下面的测试,
void CtestDlg::OnBnClickedButton1()
{
for (int i = 0; i < 100; i++)
{
CAboutDlg dlg;
//dlg.DoModal();
dlg.Create(IDD_ABOUTBOX);
dlg.DestroyWindow();
}
}

结果发现app的内存一直增大,而关闭程序时,vs2005并没有提示任何内存泄漏,那么确实也应该没有泄漏。
但是内存为什么一直变大呢?谁能帮我解释一下。
...全文
201 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
算了,既然不是我的代码泄漏,那么不理他了
许文君 2014-02-08
  • 打赏
  • 举报
回复
创建窗口涉及窗口注册类,因此你虽然destroy了,但是系统内存管理策略里并不一定是立即释放。
这不是鸭头 2014-02-08
  • 打赏
  • 举报
回复
CAboutDlg要是IDE自己产生的那个,而且你也没有添加代码的话,你的那些代码不存在内存泄漏的问题。
jay102030 2014-02-07
  • 打赏
  • 举报
回复
DestroyWindow 只是销毁窗口 并没有调用delete 操作来释放内存 所以 内存一致在增大 一般调用destroywindows 的dlg 都是new 出来的 所以对应的都应该使用delete 但是如果不是new 出来的你调用了destroywindows 程序也不会报错 在程序退出时 会跟随app的析构 先把这部分内存回收了 所以没有说内存泄漏
华美乐章 2014-02-07
  • 打赏
  • 举报
回复
DestroyWindow成员函数向窗口发送一个适当的消息,以使该窗口变为非激活的并移去输入焦点。它还销毁窗口的菜单,清除应用程序的队列,销毁定时器,清除剪贴板拥有权,并且如果CWnd对象位于剪贴板观察器链的顶部,还打断剪贴板观察器链。它向窗口发送WM_DESTROY消息和WM_NCDESTROY消息。它不销毁CWnd对象。
  • 打赏
  • 举报
回复
我只是在测试自己的程序,有没有内存泄漏,结果界面切换多次后发现会变少,为了确认是不是我造成的,就用自动生成的CAboutDlg 测试,发现内存确实会变大,在任务管理器中很容易看出来。
xiaohuh421 2014-01-28
  • 打赏
  • 举报
回复
dlg对象本身是一个栈变量, 是不会有内存泄漏的. 只看dlg对象中是否有其它资源未释放. 我也测试过, 确实运行100次或者几百次后会有几K的内存增加. 但是作为一个普通对话框, 你觉得会没事一会打开一会关闭吗? 就算是真的有内存泄漏,一次漏几k, 那么你的1G内存也够它打无数次了.
xiaohuh421 2014-01-28
  • 打赏
  • 举报
回复
你是否对CAboutDlg 做了什么? 有没可能是这里面泄漏?
hdg3707 2014-01-28
  • 打赏
  • 举报
回复
这个好象是操作系统的内存管理的事,也就是你的程序虽然释放内存了,但操作系统并不是立即释放,而是等待合适的时机才释放

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧