gpt4 book ai didi

c++ - 在 QueryInterface() 实现中调用 AddRef() 的正确方法

转载 作者:可可西里 更新时间:2023-11-01 09:58:55 24 4
gpt4 key购买 nike

我发现了一些 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com