首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IEnumString::Next的资源管理合同是什么?

IEnumString::Next的资源管理合同是什么?
EN

Stack Overflow用户
提问于 2021-06-16 08:28:08
回答 1查看 76关注 0票数 3

我试图在IEnumString接口上实现一个迭代器。我很难弄清楚IEnumString::Next()方法的精确合同。

第二个参数记录如下:

rgelt 枚举项的数组。 枚举数负责分配任何内存,调用方负责释放内存。

让我困惑的部分是如何正确地管理记忆。显然,IEnumString实现分配调用方请求释放的内存。这似乎意味着,接收到的OLESTR*指向已将其所有权转移给调用方的内存。

这就是如何解释文档吗?如果是,应该使用哪个分配器来释放内存?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-16 08:36:19

根据这个由微软撰写的关于Github的示例,应该通过调用CoTaskMemFree来释放内存。

开始阅读第91行:

代码语言:javascript
复制
IFACEMETHODIMP CSampleSpellCheckProvider::InitializeWordlist(WORDLIST_TYPE wordlistType, _In_ IEnumString* words)
{
    unsigned int type = wordlistType;
    engine.ClearWordlist(type);

    HRESULT hr = S_OK;
    while (S_OK == hr)
    {
        LPOLESTR lpWord;
        hr = words->Next(1, &lpWord, nullptr);

        if (S_OK == hr)
        {
            hr = engine.AddWordToWordlist(type, lpWord);
            CoTaskMemFree(lpWord);
        }
    }

    return hr;
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67999012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档