嗨,我正在使用以下方法在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
我不相信OnDestroyOnInitDialog是相反的,但是哪个函数是?没有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/

10-12 05:07