您好,我正在使用 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
也是如此。
我不相信 OnDestroy
是 OnInitDialog
的对立面,但那是哪个函数呢?没有 OnExitDialog
。
检测到内存泄漏!
倾倒对象->
{601} 0x00AEED48
处的客户端 block ,子类型 c0,212 字节长。
位于 $00AEED48
的 CMFCVisualManager
对象,212 字节长
对象转储完成。
程序 [5312] ClockMaster.exe: Native
已退出,代码为 2 (0x2)。
即使窗口应该自动销毁,因为它不是指针,我仍然不应该出现内存泄漏,对吗?并且自从放置
m_ModeTabs.DestroyWindow();
在 OnInitDialog
函数中,在其创建后解决了内存泄漏问题,它真的不会是其他原因导致的问题吗?删除 m_ModeTabs.Create(...
也解决了内存泄漏,所以我很确定它的 m_ModeTabs
导致了它。
最佳答案
虽然您没有说,但我假设 m_ModeTabs 是您的 CClockMasterDlg 的子窗口。在那种情况下或类似情况下,您不必显式调用 DestroyWindow。当一个窗口被 Win32 Destroy() 时,它的所有子窗口也会被销毁。
由于您将 m_ModeTabs 声明为常规变量(而非指针),它所拥有的内存将在 CClockMasterDlg 的析构函数期间由 C++ 运行时自动释放。
关于c++ - OnDestroy 中的 DestroyWindow 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10703489/