Domanda

Sto guardando attraverso un'API scritta in C ++ e sono confuso su cosa significhi il seguente tipo di parametro:

void*& data

Ciò significa che l'utente passerebbe in riferimento a un puntatore vuoto? Se è vero, qual è il punto? Voglio dire, vuoto* è già indirizzato, quindi perché vorresti mai reindirizzarlo?

È stato utile?

Soluzione

È difficile dirlo senza vederlo uso, ma fai notare che un riferimento è un livello di indirezione. Lo troveresti strano se fosse un puntatore a un puntatore? Quelli sono abbastanza comuni - in effetti li affronti quando accetti gli argomenti della riga di comando e ottieni puntatori a consigli di carattere. Un altro esempio sarebbe se stessi facendo una mappa hash usando i secchi e volessi essere in grado di restituire il puntatore al puntatore che ha iniziato il secchio.

Il punto è che a volte hai bisogno di più livelli di indirezione. È vero che mescolare puntatori e riferimenti può essere eccentrico, ma ci sono buone ragioni per questo. Uno dei motivi comune è la necessità che il codice C ++ interagisca con le API C. Molte chiamate di sistema Posix richiedono puntatori vuoti che vengono passati e poi cambiati, quindi la funzione C ++ in questione potrebbe agire come un involucro attorno a quello.

Altri suggerimenti

void * means pass-by-pointer in C++, meaning you pass in a pointer, but it's actually a copy of the pointer. If you modified this pointer in your function, like changing its address, it is not reflected in the pointer you passed in.

Combining that with pass by reference, void *& means you are passing an alias of the original pointer to this function. If you modified it, like changing its address, it will be reflected in the original pointer.

But be careful to not return reference to local void*. Don't do something like this:

void*& f()
{
 int* a=new int(10);
 void* x=(void*)a;
 return x;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top