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处理程序