嗨,我正在使用以下方法在MFC中创建基于对话框的应用程序:
BOOL CClockMasterDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
m_ModeTabs.Create(this,WS_CHILD | WS_VISIBLE, 0);
}
如果使用以下命令创建后,我在
m_ModeTabs
函数中销毁了CClockMasterDlg::OnInitDialog
:m_ModeTabs.DestroyWindow();
我没有内存,但是当我将其放入
CClockMasterDlg::OnDestroy()
时会泄漏,即使遇到困难,它也会被调用并返回true
。我不相信
OnDestroy
与OnInitDialog
是相反的,但是哪个函数是?没有OnExitDialog
。检测到内存泄漏!
转储对象->
{cc}
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声明为常规变量(而不是指针),因此C ++运行时将在CClockMasterDlg的析构函数期间自动释放其拥有的内存。
关于c++ - OnDestroy中的DestroyWindow无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10703489/