我有一些使用接口(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/