【发布时间】:2010-07-06 14:12:21
【问题描述】:
直到现在,我从来没有真正需要我正在开发的大型 MFC(如果重要的话是单文档界面)应用程序的 Winapp ExitInstance()。但现在我这样做了,主要是为了清理内存分配、卸载一些 DLL 等。好吧,我很快就从明显的内存泄漏中了解到,并且没有调用 ExitInstance。我错过了什么明显的东西吗?我是否需要手动向消息映射中添加一些内容以确保调用了我的 ExitInstance 覆盖?
我想我可以在其他地方进行清理,但如果我可以让它运行,那是最好的地方。有趣的是,我通过在 Google 中输入诸如“ExitInstance never call”之类的字符串,发现了很多这样的例子,但在任何情况下都没有提供任何真正的答案。当有人从文件菜单中单击关闭框或“退出”时,应用程序通常会关闭,并且主机窗口的 OnClose() 肯定总是会被调用。我什至尝试通过放置 AfxGetMainWnd()->DestroyWindow();在那个大型机 OnClose() 事件中,但我仍然无法让 ExitInstance() 实际运行。也许这只是一个很大的虚拟功能?或者也许 I'M 只是一个大傻瓜? :-)
【问题讨论】:
-
如果您的应用程序是从 CWinApp 派生的,则应始终调用 ExitInstance。如果没有,可能是没有正确声明,或者您的应用因某种原因提前终止。
-
我知道它应该,但它没有,即使没有运行、没有命中、没有错误,并且应用程序以代码 0 关闭。奇怪。我需要在消息映射中添加一些内容吗?如果我的 ExitInstance() 覆盖也是虚拟的(没关系),这是否重要。我是否需要在 Message 映射中添加一些东西以确保它被调用?
-
“我的 ExitInstance() 覆盖是否也是虚拟的是否重要(不应该重要)。”这无关紧要,因为被覆盖的虚函数始终是虚函数,无论您是否将其标记为虚函数。