DestroyWindow in OnDestroy 不起作用



嗨,我正在使用以下方法在MFC中制作一个基于对话框的应用程序:

BOOL CClockMasterDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
m_ModeTabs.Create(this,WS_CHILD | WS_VISIBLE, 0);
}
如果我在函数中创建

后销毁CClockMasterDlg::OnInitDialog m_ModeTabs

m_ModeTabs.DestroyWindow();

我没有内存,但是当我把它放在CClockMasterDlg::OnDestroy()我得到内存泄漏时会泄漏,即使很难它被调用并返回true.我不认为OnDestroyOnInitDialog的相反,但是哪个功能呢?没有OnExitDialog.

检测到内存泄漏!倾倒对象 ->{601}客户端块在0x00AEED48,子类型 c0,212 字节长。一个CMFCVisualManager对象,长度为$00AEED48,212字节长对象转储完成。程序[5312] ClockMaster.exe: Native已退出,代码为 2 (0x2(。

即使很难,窗口也应该自动销毁,因为它不是指针,我仍然不应该得到内存泄漏,应该吗?自从放置

m_ModeTabs.DestroyWindow();

在创建OnInitDialog函数解决内存泄漏后,它不可能真的是其他导致麻烦的东西,不是吗?删除m_ModeTabs.Create(...还可以解决内存泄漏,因此我很确定它m_ModeTabs导致它的原因。

以为你不说,我假设m_ModeTabs是你的CClockMasterDlg的子窗口。 在这种情况下或类似情况下,您不必显式调用 DestroyWindow。当窗口被 Win32 销毁((时,其所有子窗口也会被销毁。

由于您已将m_ModeTabs声明为常规变量(而不是指针(,因此在 CClockMasterDlg 的析构函数期间,C++运行时将自动释放它拥有的内存。

我实际上遇到了一个错误,该错误将"在 MFC 中修复,用于 Visual Studio 的下一个主要版本"。

在仅对话框 mfc 应用程序中使用 CVSListBox 时,会发生内存泄漏。

有关该错误和几种解决方法的信息可在此处找到:

https://connect.microsoft.com/VisualStudio/feedback/details/646445/cvslistbox-produces-memory-leaks

http://connect.microsoft.com/VisualStudio/feedback/details/565327/memory-leaks-using-c

还有一篇关于该错误的报告:

http://social.msdn.microsoft.com/Forums/en/vcgeneral/thread/8870974f-1414-4dd7-b7c3-a1c320c0e91e

第一个链接的报价:

你好

感谢您的报告。此问题已在 MFC 中修复,以供下次使用 Visual Studio 的主要版本。

帕特·布伦纳 视觉C++库开发

最新更新