将 CComPtr 传递给具有原始指针原型的函数



我正在浏览一些处理Windows映像组件库的遗留C++代码,我观察到了这一点:

void setProperties(IPropertyBag2* const pBag)
{  
   pBag->Write(...);
}
void other_function()
{
   CComPtr<IPropertyBag2> pBag;
   //Code to initialize pBag
   setProperties(pBag);
}

setProperties 方法只是将一堆属性写入属性包。代码编译和运行良好,因为我认为它调用了适当的类型转换运算符。

我的问题是是否推荐这样的接口,或者是否有更好的方法来传递指针。例如,如果将签名更改为:

void setProperties(const CComPtr<IPropertyBag2>& pBag)

原始接口指针是处理 COM 对象的规范方法。它们也是最灵活的。使用对 CComPtr 的引用将使您始终使用 CComPtr。

任何COM指针,即使是哑指针,都自动成为智能指针,因为对象本身实现了AddRefRelease。如果函数没有保留指针的副本,则甚至无需担心这一点。

为方便起见,CComPtr 类型会自动将自身转换为原始指针。

使用 CComPtr 参数没有太多优点(除非它是非常量参数并且您要修改它)。CComPtr 对于局部变量和实例变量更有用。

但这样做是可以的,如果只是作为风格/一致性的问题。

相关内容

  • 没有找到相关文章

最新更新