阅读:1828回复:8
关于销毁一个窗口后,内存使用量依然保持不变的MFC问题
最近遇到这么一个问题,想请教诸位:
我创建一个窗口后,销毁它。根据习惯思维方式,这个窗口所占用的内存应该被释放掉了。但事实上不。用资源管理器里一直盯着,我发现,只要创建一个新窗口,该程序的内存占用量自然会上升,但是在销毁该窗口之后,却并没有任何的减少。 这让我觉得有些奇怪。想请教对此有研究的朋友。 我的例子是用VC6创建一个基于对话框的工程,主对话框类名为CDiagTest,然后再增加一个新的对话框,并用ClassWizard将该新对话框定义为如CNewDiag, 然后在在CDiagTest的OnOK()中加入几句: CDiagNew *dlg; dlg = new CDiagNew(); int nResponse = dlg->DoModal(); delete dlg; |
|
沙发#
发布于:2004-12-22 16:12
CDiagNew *dlg;
dlg = new CDiagNew(); int nResponse = dlg->DoModal(); dlg = NULL; delete dlg; |
|
板凳#
发布于:2004-12-22 17:03
CDiagNew *dlg; 哈哈,这样也可以?不出错找我 |
|
|
地板#
发布于:2004-12-22 21:39
[quote]CDiagNew *dlg; 哈哈,这样也可以?不出错找我 [/quote] |
|
地下室#
发布于:2004-12-22 21:44
最近遇到这么一个问题,想请教诸位: 通常你不会找得到一种安全的办法来清理内存,建议在对话框内部使用自销毁,看看 MSDN 中关于对话框的帮助吧 这里你只需要在尾部加一句 dlg = NULL;就可以了 |
|
5楼#
发布于:2004-12-25 14:14
谢谢xx_focus的回答。 “通常你不会找得到一种安全的办法来清理内存”。。。 我想请教的是,如果不是“通常”呢?:) 有无可能的办法? 另外,将dlg置空的作用应该是避免该指针变为野指针吧。但似乎与我的清理内存的初衷帮助不大,因为一旦销毁该窗口之后,相关的一切是都不会再使用的了。 |
|
6楼#
发布于:2004-12-25 16:58
内存是由MFC来管理的,什么时候释放是它的事情...
|
|
|
7楼#
发布于:2004-12-25 22:17
内存是由MFC来管理的,什么时候释放是它的事情... Bingo!!! It's what I'm looking for. 能否请vc程序员详细解释一下MFC里的管理过程? 另外,如果MFC可以做的话,我们是否自然也可以吧?。。。 |
|
8楼#
发布于:2004-12-25 22:26
[quote]内存是由MFC来管理的,什么时候释放是它的事情... Bingo!!! It's what I'm looking for. 能否请vc程序员详细解释一下MFC里的管理过程? 另外,如果MFC可以做的话,我们是否自然也可以吧?。。。 [/quote] 或者指点一下迷津也好,比如哪本书介绍这方面的内容比较详细具体,网上哪篇文章点中了要害。。。 总比我一直为此迷惑要强啊 谢谢了:) |
|