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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值