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

标签 c++ mfc

您好,我正在使用 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/

相关文章:

html - MFC 中的粗体标签

c++ - SSE3 内在函数 : How to find the maximum of a large array of floats

c++ - 编译 Boost Spirit 关键字解析器示例

c++ - 数组作为函数的参数

c++ - 更改 CMFCRibbonStatusBar 的文本,但显示第一个字符和三个点(如 "C...")

MysqlDump 出现 ShellExecute 错误

C++调用静态成员函数指针

c++ - ndk-build 给我 "error: undefined reference"到 cv::CascadeClassifier::load(std::string const&) 即使在我链接库之后

c++ - MFC CFileDialog 在用户上次运行时选择的位置打开

c++ - 无法更改 MFC 按钮标题