Diferencia entre puntero a puntero frente a referencia a puntero (C ++)

Tengo un poco de código COM que utiliza punteros de interfaz. El autor original del código implementó funciones que devuelven un puntero de interfaz como este:

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

en lugar de la tradicional

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

La función (1) se llama así:

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

que definitivamentemir mal pero funciona bien. No estoy seguro si solo estoy tomando esta línea porque el parámetro out no es un puntero a la variable de salida o porque hay algo mal con este enfoque.

Existe alguna ventaja de utilizar una referencia a puntero en lugar de un puntero a puntero para los parámetros de salida?

Respuestas a la pregunta(8)

Su respuesta a la pregunta