PostMessage(
hwnd,
MSG_SYNCHRONIZE_EVENT,
eEvent_NewMessage,
(LPARAM)new NewMessageEvent(...)
);
请观察上面一行中的new NewMessageEvent
,我正在创建NewMessageEvent
的新对象以发送到消息处理程序。
我确定,我正在消息处理程序中为 NewMessageEvent
调用 delete
。
问题是我的静态分析工具将其显示为内存泄漏。现在问题可能出在使用 PostMessage
时,我们不确定它是否会被处理。
我应该采取什么方法来解决这个内存泄漏问题。
最佳答案
消息的接收者必须删除该对象。您还需要处理调用 PostMessage
失败的情况。代码运行如下:
NewMessageEvent* event = new NewMessageEvent(...);
if (!PostMessage(hwnd, MSG_SYNCHRONIZE_EVENT, eEvent_NewMessage, (LPARAM)event))
{
delete event;
// handle the error condition
}
然后在处理消息的代码中,收件人,您可以执行以下操作:
case MSG_SYNCHRONIZE_EVENT:
NewMessageEvent* event = (NewMessageEvent*)lParam;
// handle the event
delete event;
break;
假设您已完成所有这些操作,那么就不会发生泄漏。静态分析工具不可能找出该对象被破坏的位置。您必须找到一种方法来告诉该工具忽略该特定分配。
关于c++ - 如果在消息处理程序中使用对象,如何解决内存泄漏问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34675483/