C++ C++;如何将智能指针传递到将修改指针的输出参数
所有原始指针都需要在程序中使用SmartPointer进行处理 但我对这个Xaudio2电话有问题C++ C++;如何将智能指针传递到将修改指针的输出参数,c++,parameters,output,smart-pointers,xaudio2,C++,Parameters,Output,Smart Pointers,Xaudio2,所有原始指针都需要在程序中使用SmartPointer进行处理 但我对这个Xaudio2电话有问题 HRESULT XAudio2Create(_Out_ IXAudio2 **ppXAudio2, _In_ UINT32 Flags, _In_ XAUDIO2_PROCESSOR XAudio2Processor); 我的问题是,在将智能指针作为指针传递给指针时,如何使用智能指针,这是否可能?如果不是的话,我应该如何以一种聪明的方式去做呢?也就是说,我如何为参数\u Out
HRESULT XAudio2Create(_Out_ IXAudio2 **ppXAudio2, _In_ UINT32 Flags,
_In_ XAUDIO2_PROCESSOR XAudio2Processor);
我的问题是,在将智能指针作为指针传递给指针时,如何使用智能指针,这是否可能?如果不是的话,我应该如何以一种聪明的方式去做呢?也就是说,我如何为参数\u Out\IXAudio2**ppXAudio2
传递智能指针
任何帮助都将不胜感激。这里有两条折痕——第一条是处理函数需要一个指向(非ST!)原始指针的原始指针的事实,第二条是解决这样一个事实:当您需要在这里调用其
Release()时,所有内置智能指针都会对所拥有的指针调用delete
)
方法。在工厂函数返回之前等待创建智能指针将解决问题1,而自定义删除程序可以解决问题2。你想怎么做完全取决于你自己,但像这样的事情应该行得通:
IXAudio2* p = nullptr;
if(!SUCCEEDED(XAudio2Create(&p, GetFlags(), GetProcessor())))
; // fail
std::shared_ptr<IXAudio2> smart(p,
[](IXAudio2* p) { p->Release(); }); // or unique_ptr with somewhat different syntax
IXAudio2*p=nullptr;
如果(!成功(XAudio2Create(&p,GetFlags(),GetProcessor()))
; // 失败
标准::共享ptr智能(p,
[](IXAudio2*p){p->Release();});//或具有不同语法的唯一\u ptr
附录:这些年来,已经有很多COM智能指针基本上就是这样写的,并且在适当的时候调用AddRef()
/RemoveRef()
。e、 g.ATL的CComPtr
。如果您有权访问其中一个参数,您可以使用它而不是滚动自己的参数。由于它是一个out参数,您可能需要在XAudio2Create
返回后将其包装在智能指针中。不过,如果您需要调用另一个函数来释放以这种方式创建的对象,则需要一个自定义删除程序。