我有一个遗留代码。代码是这样工作的:在 Event1
发生后,它会在堆中创建一个窗口对象(继承自 CWindowImpl
类)。在 Event2
发生后,它应用窗口中所做的更改,通过调用 DestroyWindow()
关闭它并通过调用 delete
释放堆中的内存>.
此代码有错误,因为它在处理此窗口的所有消息之前删除了窗口对象。如何确定何时可以安全地为窗口对象调用 delete
?
我发现的唯一解决方案是覆盖 OnFinalMessage
并在那里调用 delete this
。我不喜欢它,因为它必须保证对象只在堆中创建。有更好的想法吗?
谢谢。
最佳答案
完成 DestroyWindow
后,窗口句柄已销毁,因此可以安全地对窗口类指针使用 delete
。到那时没有迟到的消息可以到达。
OnFinalMessage
来自内部 WTL 的 WM_NCDESTROY
消息处理程序。
关于c++ - 如何正确销毁放置在堆中的窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12263920/