gpt4 book ai didi

c++ - 如果对象将在消息处理程序中使用,如何解决内存泄漏问题?

转载 作者:搜寻专家 更新时间:2023-10-31 02:18:17 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com