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的效果相同。