D3D11
+ -

Windows运行时库WRL智能指针ComPtr

2024-05-25 39 0

D3D11和D3D12等都是使用COM进行编程的,其获取一个对象是通过特定的接口返回的,当不再使用时是通过Release来释放的。其中所有COM的基来都是IUnkow,其内部管理着对象的计引用计数,当为0时,自动释认其内存空间。
为了辅助用户管理COM对象的生命周期,Windows运行时库WRL(Windows Runtime Libray)专门为此提供了其智能指针类Microsoft::WRL::ComPtr。当一个对象超出其作用域空间时,其智能指针的析构会自动释放接口的内存空间。

要使用WRL,必须引入wrl.h头文件

ComPtr有以下几种使用方法:

  • Get(),返回一个指向底层COM的原始指针。此方法用于将原始的COM接口指针作为参数传递给函数。
Microsoft::WRL::ComPtr<ID3D12RootSignature> mRootSignature;

//SetGraphicsRootSignature用于获取ID3D12RootSignature*类型的参数
mCommandList->SetGraphicsRootSignature(mRootSignature.get());
  • GetAddressOf(),返回指针底层COM接口原始指针的指针。使用此方法可利用函数返回COM接口的指针。

    Microsoft::WRL::ComPtr<ID3D12CommandAllocator> mDirectCmdListAlloc;
    md3Device->CreateCommandAllocator(D3D12_COMMAND_LIST_TYPE_DIRECT,mDirectCmdListAlloc.GetAddressOf());
    
  • Reset():将ComPtr实例设置为nullptr释放与之相关的所有引用(同时减少底层COM接口的引用计数)。此方法的功能与将ComPtr目标实例赋值为nullptr的效果相同。

0 篇笔记 写笔记

Windows运行时库WRL智能指针ComPtr
D3D11和D3D12等都是使用COM进行编程的,其获取一个对象是通过特定的接口返回的,当不再使用时是通过Release来释放的。其中所有COM的基来都是IUnkow,其内部管理着对象的计引用计数,当为0时,自动释认其内存空间。为了辅助用户管理COM对象的生命周期,Windows运行时库WRL(Wi......
作者信息
站长漫谈
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!