c++ - 指向指针的指针与指向指针的引用之间的区别 (C++)

标签 c++ pointers com out

我有一些使用接口(interface)指针的 COM 代码。代码的原作者实现了这样的返回接口(interface)指针的函数:

HRESULT Query ( IN BSTR sQuery, OUT IEnumWbemClassObject* &pEnumerator ); // (1)

而不是传统的

HRESULT Query ( IN BSTR sQuery, OUT IEnumWbemClassObject** ppEnumerator ); // (2)

函数 (1) 是这样调用的:

hRes = Query ( sQuery, pEnumerator ); // (3)

这绝对看起来是错误的,但它工作正常。我不确定我是否只是选择这一行,因为 out 参数不是指向输出变量的指针,或者因为这种方法有问题。

对于 out 参数使用指向指针的引用而不是指向指针的指针是否有优势?

最佳答案

第一个示例是对指针的引用,即。对类型 IEnumWbemClassObject* 的引用:

HRESULT Query ( IN BSTR sQuery, OUT IEnumWbemClassObject* &pEnumerator );

因此,如果 pEnumerator 被声明为 IEnumWbemClassObject*(我假设它是),您不需要显式传递 的地址pEnumerator 到函数或取消引用函数内的变量以更改 pEnumerator 指向的位置(否则需要使用 IEnumWbemClassObject** 的参数) .

对指针的引用与对任何其他类型的引用具有相同的行为,只需将上面的示例视为“对指针的引用”不是 “指向引用的指针”。 没有指向引用的指针这样的东西。

关于c++ - 指向指针的指针与指向指针的引用之间的区别 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8424132/

相关文章:

c++ - -static-libstdc++ 适用于 g++ 但不适用于纯 gcc?

c# - 需要有关从客户端应用程序引用托管 COM 服务器 (EXE) 的建议

c++ - 如何清理 _variant_t

c# - COM 基本链接

c++ - 如何合法地将函数指针转换为方法指针?

C:结构是作为指针实现的吗?

c++ - 哪种 C++ 设计方法更易于维护?

c++ - 在Visual Studio C++中,如何快速找到需要的头文件?

c++ - 3度转码帧I420 RGBA BGRA

c++ - 集合中的智能指针多态性