Sau*_*Sau 5 c++ com smart-pointers
我正在浏览一些处理Windows Imaging Component库的遗留C++代码,我观察到了这一点:
void setProperties(IPropertyBag2* const pBag)
{
pBag->Write(...);
}
void other_function()
{
CComPtr<IPropertyBag2> pBag;
//Code to initialize pBag
setProperties(pBag);
}
Run Code Online (Sandbox Code Playgroud)
该setProperties方法只是将一堆属性写入属性包.代码编译并运行正常,因为我认为它调用适当的类型转换操作符.
我的问题是,是否建议使用这样的接口,或者是否有更好的传递指针的方法.例如,如果签名更改为:是否存在任何差异(在安全性/性能方面):
void setProperties(const CComPtr<IPropertyBag2>& pBag)
Run Code Online (Sandbox Code Playgroud)
原始接口指针是使用 COM 对象的规范方法。它们也是最灵活的。使用对 CComPtr 的引用将使您始终使用 CComPtr。
任何 COM 指针,即使是哑指针,也会自动成为智能指针,因为对象本身实现了AddRef和Release。如果函数不保留指针的副本,则无需担心这一点。
为了方便起见,CComPtr 类型会自动将自身转换为原始指针。
| 归档时间: |
|
| 查看次数: |
3524 次 |
| 最近记录: |