MFC SendMessage()中的资源泄漏

用户名

我是MFC的新手。

如何释放其作为通过资源(WPARAM)SendMessage()

在这里,我使用“新”来创建它。以下是相同的快照。

void Build::BuildCube()
{

    SCtPt *data = new SCtPt;
    data->vm = true;
    int dir = 100;
    MFrame()->SendMessage(WM_MAP_NEW, (WPARAM)data, (LPARAM) dir);
}

我想确保此功能的“数据”资源得到​​释放。

谢谢...

杰瑞YY雨

由于该SendMessage()API是同步API,因此在返回之前,它将消息发送到另一个窗口过程。当调用SendMessage()返回时,可以释放/释放数据:

void Build::BuildCube()
{
    SCtPt *data = new SCtPt;
    data->vm = true;
    int dir = 100;
    MFrame()->SendMessage(WM_MAP_NEW, (WPARAM)data, (LPARAM)dir);
    delete data;
}

或者,更好的是,您可以避免完全在堆上分配数据。只需将其分配在堆栈上,然后让RAII处理其余部分:

void Build::BuildCube()
{
    SCtPt data;       // don't use "new", so you won't get a pointer
    data.vm = true;
    int dir = 100;
    MFrame()->SendMessage(WM_MAP_NEW, (WPARAM)data, (LPARAM)dir);
    // no delete necessary!
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章