1

古いコードがあります。コードは次のように機能します:Event1が発生した後、ウィンドウ オブジェクト ( CWindowImplclass から継承) をヒープに作成します。が発生した後Event2、ウィンドウで行われた変更を適用し、 を呼び出してウィンドウを閉じ、 を呼び出しDestroyWindow()てヒープ内のメモリを解放しますdelete

このウィンドウのすべてのメッセージが処理される前にウィンドウ オブジェクトを削除するため、このコードはバグです。deletewindow オブジェクトを呼び出しても安全な時期を確実に知る方法は?

私が見つけた唯一の解決策は、オーバーライドOnFinalMessageしてそこで呼び出すdelete thisことです。オブジェクトがヒープでのみ作成されることを保証する必要があるため、私はそれが好きではありません。より良いアイデアはありますか?

ありがとうございました。

4

1 に答える 1

1

を実行DestroyWindowすると、ウィンドウのハンドルが破棄されるのでdelete、ウィンドウ クラス ポインターで安全に使用できます。その時点で遅延メッセージが到着することはありません。

OnFinalMessageメッセージの内部 WTL ハンドラーから取得されWM_NCDESTROYます。

于 2012-09-04T13:17:28.533 に答える