所有原始指针都需要在程序中使用Smartpointers进行处理。
但我在使用此Xaudio2电话时遇到问题
HRESULT XAudio2Create(_Out_ IXAudio2 **ppXAudio2, _In_ UINT32 Flags,
_In_ XAUDIO2_PROCESSOR XAudio2Processor);
我的问题是如何在将智能指针作为指针指针传递时使用智能指针,这是否可能?如果不是,我该如何以聪明的方式解决这个问题?我如何为参数_Out_ IXAudio2 **ppXAudio2
非常感谢任何帮助。
答案 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()
。如果您可以访问其中一个,则可以使用它而不是自己滚动。