c++ - 通过调用 IUnknown::Release() 释放 COM 接口集合
问题描述
在我的应用程序中,我需要将 COM 接口的发布推迟到以后。因此,我将接口指针存储在其中std::vector<IUnknown*> COMInterfaces
,然后循环遍历所有指针并Release()
像这样调用:
for(IUnknown* item : COMInterfaces) item->Release();
但是,在以下链接中,在第 4.1.3 节中,我读到:
在 COM 中,只有接口被引用计数,而不是对象本身。在客户端获得对特定接口的引用后,它必须在该接口上调用 release 方法,而不是引用同一对象的不同接口。
所以,现在我有点困惑是否可以多态地发布接口。我找不到任何明确说明这是否可以的文档。
编辑:下面的评论确认这有效,我将像这样使用它。但是,欢迎任何指向官方文档的指针以及关于为什么有时我会看到以下代码的任何解释(这也是SafeRelease()
微软定义的方式)
template<class T>
void Release(T*& comInterface) {
if(comInterface) {
comInterface->Release();
comInterface = nullptr;
}
}
代替
void Release(IUnknown*& comInterface) {
if(comInterface) {
comInterface->Release();
comInterface = nullptr;
}
}
解决方案
推荐阅读
- javascript - javascript - 如何在鼠标位置上缩放图像并在 div 上显示结果
- pandas - 如何在函数内格式化具有多个条件的 If 语句
- php - wordpress 中的 feed-rss2 php 文件给出服务器错误
- javascript - 如何使用 fs.readStream 和 fs.writesream 发送和接收视频( .mp4 )文件 [从客户端到服务器,反之亦然] [在 Node Js 中]?
- python - 迭代器的数量取决于带有 np.nditer 的变量
- java - 如何使用正则表达式解析自定义版本号方案?
- mysql - 仅显示某些值的最低价格的 Mysql 查询不起作用
- twilio - 将显示名称传递给 SIP 客户端
- java - 数据压缩算法:压缩字符串
- jquery - 如何使用数组名称序列化Array()