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

时间:2014-11-14 16:19:40

标签: c++ parameters output smart-pointers xaudio2

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

但我在使用此Xaudio2电话时遇到问题

HRESULT XAudio2Create(_Out_  IXAudio2 **ppXAudio2, _In_   UINT32 Flags,
    _In_   XAUDIO2_PROCESSOR XAudio2Processor);

我的问题是如何在将智能指针作为指针指针传递时使用智能指针,这是否可能?如果不是,我该如何以聪明的方式解决这个问题?我如何为参数_Out_ IXAudio2 **ppXAudio2

传递智能指针

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

这里有两个问题 - 第一个是处理函数需要一个指向(nonconst!)原始指针的原始指针的事实,第二个是处理所有内置智能指针调用{{{ 1}}在拥有指针时,你需要在这里做的是调用它的delete方法。在工厂函数返回之前等待创建智能指针将解决问题1,并且自定义删除器可以解决问题2.您想要做什么事情取决于您,但是这样的事情应该有效:

Release()

附录:多年来写出的大量COM智能指针基本上都是这样做的,并在适当时调用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 / AddRef()。例如ATL的RemoveRef()。如果您可以访问其中一个,则可以使用它而不是自己滚动。