Как правильно уничтожить окно, помещенное в кучу?

У меня есть устаревший код. Код работает так: после Event1 произошло, это создает объект окна (наследуется от CWindowImpl класс) в кучу. После Event2 произошло, он применяет изменения, сделанные в окне, закрывает его, вызывая DestroyWindow() и освобождает память в куче, вызывая delete,

Этот код содержит ошибки, потому что он удаляет объект окна до того, как все сообщения для этого окна будут обработаны. Как точно знать, когда звонить безопасно delete для оконного объекта?

Единственное решение, которое я обнаружил, это переопределить OnFinalMessage и позвонить delete this там. Мне это не нравится, потому что нужно гарантировать, что объект создается только в куче. Есть лучшие идеи?

Спасибо.

1

Решение

Сделав DestroyWindow, у вас есть дескриптор окна уничтожен, так что это безопасно использовать delete на указателе класса окна. Поздние сообщения не могут прибыть в этот момент.

OnFinalMessage происходит от внутреннего обработчика WTL для WM_NCDESTROY сообщение.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector