2012-09-04 5 views
1

기존 코드가 있습니다. 코드는 다음과 같이 작동합니다. Event1이 발생한 후 힙에 창 개체 (CWindowImpl 클래스에서 상 속됨)가 만들어집니다. Event2이 발생하면 창에서 변경 한 내용이 적용되고 DestroyWindow()을 호출하여 닫고 delete을 호출하여 힙의 메모리를 해제합니다.힙에 배치 된 창을 올바르게 파괴하는 방법은 무엇입니까?

이 코드는이 윈도우에 대한 모든 메시지가 처리되기 전에 윈도우 객체를 삭제하기 때문에 버그가 있습니다. 창 개체에 delete을 호출하는 것이 안전 할 때를 확실히 알 수있는 방법은 무엇입니까?

유일한 해결책은 OnFinalMessage을 무시하고 delete this으로 전화하는 것입니다. 나는 그것이 객체가 힙에서만 생성된다는 것을 보증해야하기 때문에 그것을 좋아하지 않는다. 더 좋은 아이디어가 있습니까?

감사합니다.

답변

1

DestroyWindow을 수행하면 창 핸들이 손상되므로 창 클래스 포인터에서 delete을 사용하는 것이 안전합니다. 그 시점에서 늦은 메시지가 도착할 수 없습니다.

OnFinalMessageWM_NCDESTROY 메시지의 내부 WTL 처리기에서옵니다.