Tipo de argumento de função seguido por * &

Eu tenho algum código escrito por outra pessoa na qual algumas funções recebem argumentos cujos tipos de dados são seguidos por um * &. Estou acostumado a funções que usam um ou outro, por exemplo tomando um "duplo *" ou um "duplo &", mas não ambos. Teria pensado que eles simplesmente cancelariam.

Aqui está um exemplo, e isso é tudo do código deles, que supostamente funciona:

Em um arquivo de cabeçalho, há uma função declarada como:

void someClass::foo(const unsigned int*& ubuff);

Então, no meu arquivo principal, há um ponteiro para alguns UINTs declarados e inicializados como:

unsigned int* pbuff = new UINT[n];

Em seguida, a função someClass :: foo é chamada como:

foo(pbuff);

Ao compilar, recebo o erro "não é possível converter o parâmetro 1 de 'unsigned int *' para 'const unsigned int * &'". Se eu mudar minha chamada de função para a seguinte, ela compila ok:

foo((const unsigned int *&)(pbuff));

Então, minhas perguntas são:

Qual é o objetivo do * &? Ou seja, como isso é diferente de * ou & por si mesmos, e por que eles não se cancelam? E o que isso faz a função esperar? Um endereço? Um valor? O endereço de um endereço? É confuso.

A solução é simplesmente converter um "unsigned int *" para um "const unsigned int * &" ok ou preciso fazer outra coisa?

Apenas mais um exemplo rápido, e isso é completamente de dentro de um arquivo cpp distribuído por outra pessoa, então suponho que isso seja compilado para eles. Eles têm uma chamada de função como

klabels = new int[sz];
EnforceLabelConnectivity(klabels, m_width, m_height, nlabels, numlabels, double(sz)/double(STEP*STEP));

Quando tento criar, recebo o erro "'SLIC :: EnforceLabelConnectivity': não é possível converter o parâmetro 1 de 'int *' para 'const int * &'".

Obrigado como sempre.

questionAnswers(3)

yourAnswerToTheQuestion