通过将其作为参考(&)传递给我,我是否完全否定了Microsoft :: WRL :: ComPtr的好处?

Nic*_*ico 5 c++ windows com directx windows-phone-8

我一直在代码中折腾ComPtrs,因为我在这里和那里都需要它们,但我一直在这样做:

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

这是否完全抵消了ComPtr的引用计数优势?我应该只按值传递(否&)吗?

感谢您的阅读

Bal*_*Pal 4

这是完全可以的,并且最好将其作为 const& 传递。

从语义的角度来看,按值传递是可以接受的,但从性能角度来看,按值传递并不那么容易,因为传递值会导致引用计数上下波动,而且两者都是“互锁”操作,会带来严重后果。而我们却没有得到任何回报。

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