我发现了一些 QueryInterface()
的实现模式:
// Inside some COM object implementation ... virtual HRESULT __stdcall QueryInterface(REFIID riid, void **ppv) { *ppv = /* Find interface ... */ if (*ppv == nullptr) return E_NOINTERFACE; static_cast<IUnknown *>(*ppv)->AddRef(); // ### return S_OK; }
感兴趣的行是标有 //###
注释的行。
在 IUnknown
static_cast
指针上调用 AddRef()
真的有必要吗?或者它只是无用的样板代码?
换句话说,一个简单的 AddRef()
调用(即 this->AddRef()
)就可以了吗?如果不是,为什么?
最佳答案
当然,您通常只有一个 AddRef() 实现,因此如何调用它并不重要。请注意代码使用 ppv 的方式是可能的灵感来源,它是无类型的 (void**),因此需要进行强制转换。也许撕下会让你以不同的方式做这件事。
关于c++ - 在 QueryInterface() 实现中调用 AddRef() 的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27760342/