Windows桌面应用程序(1-2-3-8th) COM中的内存分配

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

我们在打开对话框示例中看到了这种模式的一个例子:

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

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

为什么COM定义自己的内存分配函数? 一个原因是在堆分配器上提供了一个抽象层。 否则,有些方法可能会调用malloc,而其他方法则会调用new。 那么你的程序在某些情况下需要叫free,而在其他情况下需要delete,并且跟踪这一切将很快变得不可能。 COM分配函数创建一个统一的方法。

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

下一个
COM编码实践


原文链接:Memory Allocation in COM

猜你喜欢

转载自blog.csdn.net/qq_37422196/article/details/79771024
今日推荐