有时,方法在堆上分配内存缓冲区,并将缓冲区的地址返回到调用方。 COM 定义一对函数,用于分配和释放堆上的内存。
- CoTaskMemAlloc 函数分配内存块。
- CoTaskMemFree 函数释放 CoTaskMemAlloc分配的内存块。
我们在 “打开”对话框示例中看到了此模式的示例:
PWSTR pszFilePath;
hr = pItem->GetDisplayName(SIGDN_FILESYSPATH, &pszFilePath);
if (SUCCEEDED(hr))
{
// ...
CoTaskMemFree(pszFilePath);
}
GetDisplayName 方法为字符串分配内存。 在内部,该方法调用 CoTaskMemAlloc 来分配字符串。 此方法返回时,pszFilePath 指向新缓冲区的内存位置。 调用方负责调用 CoTaskMemFree 以释放内存。
为什么 COM 定义自己的内存分配函数? 一个原因是在堆分配器上提供抽象层。 否则,某些方法可能会调用 malloc,而另一些方法则调用 新的。 然后,你的程序需要调用 免费 在某些情况下,并 删除其他,并跟踪这一切很快就会变得不可能。 COM 分配函数创建统一的方法。
另一个考虑因素是 COM 是 二进制 标准,因此它与特定编程语言无关。 因此,COM 不能依赖于任何特定于语言的内存分配形式。
下一个