gpt4 book ai didi

c++ - 如何正确销毁放置在堆中的窗口?

转载 作者:太空宇宙 更新时间:2023-11-04 12:05:39 25 4
gpt4 key购买 nike

我有一个遗留代码。代码是这样工作的:在 Event1 发生后,它会在堆中创建一个窗口对象(继承自 CWindowImpl 类)。在 Event2 发生后,它应用窗口中所做的更改,通过调用 DestroyWindow() 关闭它并通过调用 delete 释放堆中的内存>.

此代码有错误,因为它在处理此窗口的所有消息之前删除了窗口对象。如何确定何时可以安全地为窗口对象调用 delete

我发现的唯一解决方案是覆盖 OnFinalMessage 并在那里调用 delete this。我不喜欢它,因为它必须保证对象只在堆中创建。有更好的想法吗?

谢谢。

最佳答案

完成 DestroyWindow 后,窗口句柄已销毁,因此可以安全地对窗口类指针使用 delete。到那时没有迟到的消息可以到达。

OnFinalMessage 来自内部 WTL 的 WM_NCDESTROY 消息处理程序。

关于c++ - 如何正确销毁放置在堆中的窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12263920/

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