gpt4 book ai didi

c++ - OnDestroy 中的 DestroyWindow 不起作用

转载 作者:行者123 更新时间:2023-11-28 03:36:30 27 4
gpt4 key购买 nike

您好,我正在使用 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 处的客户端 block ,子类型 c0,212 字节长。位于 $00AEED48CMFCVisualManager 对象,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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com