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

时间:2012-09-04 12:54:37

标签: c++ window wtl

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

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

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

谢谢。

1 个答案:

答案 0 :(得分:1)

完成DestroyWindow后,您已经销毁了窗口的句柄,因此在窗口类指针上使用delete是安全的。此时没有迟到的消息。

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