对于COM对象使用ComPtr代替传统指针

对于COM对象来说使用传统指针比较麻烦,还要记得Release()防止内存泄漏,一不小心就会出现各种各样的问题。针对这种问题微软提供了对于COM对象的智能指针ComPtr,这里是官方文档https://github.com/Microsoft/DirectXTK/wiki/ComPtr

举个例子,原先的代码:

 1     ID3D11Buffer*                   m_pVertexBuffer;
 2     ID3D11Buffer*                   m_pIndexBuffer;
 3     ID3D11InputLayout*              m_pInputLayout;
 4 
 5     ID3DX11Effect*                  m_pFx;
 6     ID3DX11EffectTechnique*         m_pTechnique;
 7     ID3DX11EffectMatrixVariable*    m_pFxWorldViewProj;
 8 
 9 void HillsDemo::UnLoadContent()
10 {
11     if (m_pVertexBuffer) m_pVertexBuffer->Release();
12     if (m_pIndexBuffer) m_pIndexBuffer->Release();
13     if (m_pInputLayout) m_pInputLayout->Release();
14     if (m_pTechnique) m_pTechnique->Release();
15     if (m_pFx) m_pFx->Release();
16 }

使用ComPtr的代码:

 1 Microsoft::WRL::ComPtr<ID3D11Buffer> m_pVertexBuffer;
 2 Microsoft::WRL::ComPtr<ID3D11Buffer> m_pIndexBuffer;
 3 Microsoft::WRL::ComPtr<ID3D11InputLayout> m_pInputLayout;
 4 
 5 Microsoft::WRL::ComPtr<ID3DX11Effect> m_pFx;
 6 ID3DX11EffectTechnique* m_pTechnique;
 7 ID3DX11EffectMatrixVariable* m_pFxWorldViewProj;
 8 
 9 void HillsDemo::UnLoadContent()
10 {
11     m_pVertexBuffer.Reset();
12     m_pIndexBuffer.Reset();
13     m_pInputLayout.Reset();
14     m_pFx.Reset();
15     m_pTechnique = nullptr;
16     pFxWorldViewProj = nullptr;
17 }

 

转载于:https://www.cnblogs.com/zhangbaochong/p/5546818.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值