我有遗留代码。代码的工作方式如下:在Event1
发生后,它会在堆中创建一个窗口对象(继承自CWindowImpl
类)。发生Event2
后,它会应用窗口中所做的更改,通过调用DestroyWindow()
来关闭它,并通过调用delete
释放堆中的内存。
此代码有问题,因为它会在处理此窗口的所有消息之前删除窗口对象。如何确定何时可以安全地为窗口对象调用delete
?
我发现的唯一解决方案是覆盖OnFinalMessage
并在那里调用delete this
。我不喜欢它,因为必须保证只在堆中创建对象。还有更好的想法吗?
谢谢。
答案 0 :(得分:1)
完成DestroyWindow
后,您已经销毁了窗口的句柄,因此在窗口类指针上使用delete
是安全的。此时没有迟到的消息。
OnFinalMessage
来自内部WTL的WM_NCDESTROY
消息处理程序。