C++ C++;如何将智能指针传递到将修改指针的输出参数

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

所有原始指针都需要在程序中使用SmartPointer进行处理

但我对这个Xaudio2电话有问题

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
返回后将其包装在智能指针中。不过,如果您需要调用另一个函数来释放以这种方式创建的对象,则需要一个自定义删除程序。