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参数不是指向输出变量的指针,或者因为这种方法有问题.
使用引用指针而不是指针指向输出参数是否有优势?
第一个例子是对指针的引用,即。对类型的引用IEnumWbemClassObject*
:
HRESULT Query ( IN BSTR sQuery, OUT IEnumWbemClassObject* &pEnumerator );
Run Code Online (Sandbox Code Playgroud)
因此,如果pEnumerator
被声明为 a IEnumWbemClassObject*
(我假设它是),您不需要显式地将 的地址传递pEnumerator
给函数或取消引用函数内的变量以更改位置pEnumerator
点(否则需要的一个论点IEnumWbemClassObject**
)。
一个指针的引用具有相同的行为,以任何其他类型的引用,只是认为上面的例子为是的“参照指针”和不是一个“指针的引用。” 没有指向引用的指针这样的东西。
优点与任何使用引用而不是指针的优点相同:
Query
不会导致访问冲突请注意,原始描述有误:IEnumWbemClassObject* &
是对指针的引用,而不是对引用的指针。