指针指针与指针指针(C++)之间的区别

xxb*_*bcc 6 c++ com pointers out

我有一些使用接口指针的COM代码.代码的原作者实现了返回接口指针的函数,如下所示:

HRESULT Query ( IN BSTR sQuery, OUT IEnumWbemClassObject* &pEnumerator ); // (1)
Run Code Online (Sandbox Code Playgroud)

而不是传统的

HRESULT Query ( IN BSTR sQuery, OUT IEnumWbemClassObject** ppEnumerator ); // (2)
Run Code Online (Sandbox Code Playgroud)

函数(1)被调用如下:

hRes = Query ( sQuery, pEnumerator ); // (3)
Run Code Online (Sandbox Code Playgroud)

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

使用引用指针而不是指针指向输出参数是否有优势?

Aus*_*oke 6

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

HRESULT Query ( IN BSTR sQuery, OUT IEnumWbemClassObject* &pEnumerator );
Run Code Online (Sandbox Code Playgroud)

因此,如果pEnumerator被声明为 a IEnumWbemClassObject*(我假设它是),您不需要显式地将 的地址传递pEnumerator给函数或取消引用函数内的变量以更改位置pEnumerator点(否则需要的一个论点IEnumWbemClassObject**)。

一个指针的引用具有相同的行为,以任何其他类型的引用,只是认为上面的例子为是的“参照指针”不是一个“指针的引用。” 没有指向引用的指针这样的东西。


out*_*tis 5

优点与任何使用引用而不是指针的优点相同:

  • 简单
  • 引用不能为空,因此分配给引用Query不会导致访问冲突

请注意,原始描述有误:IEnumWbemClassObject* &是对指针的引用,而不是对引用的指针。