Pergunta

Estou procurando uma API escrita em C++ e estou confuso sobre o que significa o seguinte tipo de parâmetro:

void*& data

Isso significa que o usuário passaria uma referência a um ponteiro vazio?Se isso for verdade, qual é o sentido?Quero dizer, void* já está indireto, então por que você iria querer redirecioná-lo novamente?

Foi útil?

Solução

É difícil dizer sem ver sua utilidade, mas você ressalta que uma referência é um nível de indireção.Você acharia estranho se fosse um ponteiro para um ponteiro?Esses são bastante comuns - na verdade, você lida com eles ao aceitar argumentos de linha de comando e obter ponteiros para char.Outro exemplo seria se você estivesse fazendo um mapa hash usando buckets e quisesse retornar o ponteiro para o ponteiro que iniciou o bucket.

A questão é que às vezes você precisa de vários níveis de indireção.É verdade que misturar indicadores e referências pode ser peculiar, mas há boas razões para isso.Um motivo comum é a necessidade do código C++ interagir com APIs C.Muitas chamadas de sistema POSIX exigem ponteiros vazios que são passados ​​​​e alterados, portanto, a função C++ em questão pode estar agindo como um wrapper em torno disso.

Outras dicas

void * Significa passar por ponto em C ++, o que significa que você passa em um ponteiro, mas na verdade é uma cópia do ponteiro. Se você modificou esse ponteiro em sua função, como alterar seu endereço, ela não se reflete no ponteiro que você passou.

Combinando isso com passe por referência, void *& significa que você está passando um alias do ponteiro original para esta função. Se você o modificou, como alterar seu endereço, ele será refletido no ponteiro original.

Mas tenha cuidado para não retornar a referência ao vazio local*. Não faça algo assim:

void*& f()
{
 int* a=new int(10);
 void* x=(void*)a;
 return x;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top