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

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

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

谢谢您的阅读

最佳答案

完全可以,最好将其作为const&传递。

从语义的角度来看,按值传递是可以接受的,而从性能的角度来看,则不行,因为传递会导致refcount上下波动,并且两者都是“互锁”的操作,具有严重的后果。我们没有任何返回。

ComPtr的好处在于,它允许对Release调用进行适当的匹配,这太容易搞乱了,即使很容易,它所占用的代码也很麻烦。

10-06 10:34