У меня есть устаревший код. Код работает так: после Event1
произошло, это создает объект окна (наследуется от CWindowImpl
класс) в кучу. После Event2
произошло, он применяет изменения, сделанные в окне, закрывает его, вызывая DestroyWindow()
и освобождает память в куче, вызывая delete
,
Этот код содержит ошибки, потому что он удаляет объект окна до того, как все сообщения для этого окна будут обработаны. Как точно знать, когда звонить безопасно delete
для оконного объекта?
Единственное решение, которое я обнаружил, это переопределить OnFinalMessage
и позвонить delete this
там. Мне это не нравится, потому что нужно гарантировать, что объект создается только в куче. Есть лучшие идеи?
Спасибо.
Сделав DestroyWindow
, у вас есть дескриптор окна уничтожен, так что это безопасно использовать delete
на указателе класса окна. Поздние сообщения не могут прибыть в этот момент.
OnFinalMessage
происходит от внутреннего обработчика WTL для WM_NCDESTROY
сообщение.
Других решений пока нет …