c++ - 我是否通过将 Microsoft::WRL::ComPtr 作为引用 (&) 传递来完全否定它的好处?

标签 c++ windows com windows-phone-8 directx

我一直在我的代码中反复使用 ComPtr,因为我到处都需要它们,但我一直这样做:

HRESULT Material::Initialize(aiMaterial* pMaterial,
                             Microsoft::WRL::ComPtr<ID3D11Device1> & d3dDevice,
                             Microsoft::WRL::ComPtr<ID3D11DeviceContext1> & d3dContext)

这是否完全否定了 ComPtr 的引用计数优势?我应该改为按值传递(没有 &)吗?

感谢阅读

最佳答案

这完全没问题,更喜欢将它作为 const& 传递。

从语义的角度来看,按值传递是可以接受的,但从性能的角度来看并不是那么多,因为这样传递会导致引用计数上下颠簸,并且两者都是“互锁”操作,会带来严重的后果。而我们一无所获。

ComPtr 的好处是它允许正确匹配 Release 调用,这太容易搞砸了,即使很容易,它所采用的代码困惑也令人不快。

关于c++ - 我是否通过将 Microsoft::WRL::ComPtr 作为引用 (&) 传递来完全否定它的好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17155391/

相关文章:

c++ - DLL 中的 outproc COM 服务器

python - 从 win32com 捕获标准输出?

c++ - 为什么 std::span 缺少比较运算符?

c++ - 在 C 窗口中将参数传递给线程的最佳方法是什么?

c++ - 使用记事本 C++ 打开 txt 文件时不等待

c++ - 获取添加到子窗口的列表框控件中的文本

com - IDA Pro 中是否可以将结构体字段偏移到 .data 段中定义的 vtable?

python - swig:抑制关于函数是 python 关键字的警告

c++ - 如何提供对包装类的 const 只读访问

c++ - 通过 const char * 构造函数将 false 转换为对象