1

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

此代码有问题,因为它在处理此窗口的所有消息之前删除了窗口对象。如何确定何时调用deletewindow 对象是安全的?

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

谢谢你。

4

1 回答 1

1

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

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

于 2012-09-04T13:17:28.533 回答