我试图在IEnumString接口上实现一个迭代器。我很难弄清楚IEnumString::Next()方法的精确合同。
第二个参数记录如下:
rgelt枚举项的数组。 枚举数负责分配任何内存,调用方负责释放内存。
让我困惑的部分是如何正确地管理记忆。显然,IEnumString实现分配调用方请求释放的内存。这似乎意味着,接收到的OLESTR*指向已将其所有权转移给调用方的内存。
这就是如何解释文档吗?如果是,应该使用哪个分配器来释放内存?
发布于 2021-06-16 08:36:19
根据这个由微软撰写的关于Github的示例,应该通过调用CoTaskMemFree来释放内存。
开始阅读第91行:
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;
}https://stackoverflow.com/questions/67999012
复制相似问题