C++ 如何正确销毁堆中的窗口?

C++ 如何正确销毁堆中的窗口?,c++,window,wtl,C++,Window,Wtl,我有一个遗留代码。代码是这样工作的:在发生Event1之后,它在堆中创建一个窗口对象(继承自CWindowImpl类)。在发生事件2后,它应用在窗口中所做的更改,通过调用DestroyWindow()将其关闭,并通过调用delete释放堆中的内存 此代码有缺陷,因为它在处理此窗口的所有消息之前删除了窗口对象。如何确定何时可以安全地调用窗口对象的delete 我找到的唯一解决方案是覆盖OnFinalMessage,并在那里调用删除此。我不喜欢它,因为必须保证只在堆中创建对象。有更好的主意吗 谢谢。

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

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

我找到的唯一解决方案是覆盖
OnFinalMessage
,并在那里调用
删除此
。我不喜欢它,因为必须保证只在堆中创建对象。有更好的主意吗


谢谢。

完成
销毁窗口后,您已经销毁了窗口的句柄,因此可以安全地在窗口类指针上使用
删除
。没有迟到的消息可以到达那一点


OnFinalMessage
来自内部WTL的
WM\u NCDESTROY
消息处理程序。

完成
destroy window
后,您将销毁窗口的句柄,因此在窗口类指针上使用
delete
是安全的。没有迟到的消息可以到达那一点

OnFinalMessage
来自
WM\NCDESTROY
消息的内部WTL处理程序