COM 中的内存分配

有时,方法在堆上分配内存缓冲区,并将缓冲区的地址返回到调用方。 COM 定义一对函数,用于分配和释放堆上的内存。

我们在 “打开”对话框示例中看到了此模式的示例

PWSTR pszFilePath;
hr = pItem->GetDisplayName(SIGDN_FILESYSPATH, &pszFilePath);
if (SUCCEEDED(hr))
{
    // ...
    CoTaskMemFree(pszFilePath);
}

GetDisplayName 方法为字符串分配内存。 在内部,该方法调用 CoTaskMemAlloc 来分配字符串。 此方法返回时,pszFilePath 指向新缓冲区的内存位置。 调用方负责调用 CoTaskMemFree 以释放内存。

为什么 COM 定义自己的内存分配函数? 一个原因是在堆分配器上提供抽象层。 否则,某些方法可能会调用 malloc,而另一些方法则调用 新的。 然后,你的程序需要调用 免费 在某些情况下,并 删除其他,并跟踪这一切很快就会变得不可能。 COM 分配函数创建统一的方法。

另一个考虑因素是 COM 是 二进制 标准,因此它与特定编程语言无关。 因此,COM 不能依赖于任何特定于语言的内存分配形式。

下一个

COM 编码做法