Skip to content

Le Reference (Riferimenti)

Le reference (o riferimenti) sono versioni più sicure e sintatticamente più pratiche dei puntatori. Dichiari una reference appendendo un ampersand (&) al nome del tipo.

Le reference godono di alcune proprietà fondamentali che eliminano intere categorie di bug endogeni dei puntatori:

  1. Non possono essere nulli (a meno di forzature brutali o comportamenti indefiniti).
  2. Non possono essere ‘reseated’ (riassegnati). Una volta che una reference viene legata a un oggetto, rimarrà legata ad esso per tutta la sua vita.

La sintassi delle reference è nettamente più pulita rispetto a quella dei puntatori. Non serve usare l’operatore freccia o l’asterisco per dereferenziare: usi la reference esattamente come se fosse l’oggetto puntato!

Passare oggetti per reference a una funzione (pass-by-reference) è una pratica standard in C++ per evitare di copiare inavvertitamente dati pesanti.

Impossibilità di “Reseat” (Riassegnazione)

Section titled “Impossibilità di “Reseat” (Riassegnazione)”

Ribadiamo il concetto critico: le reference non possono essere riassegnate per puntare a un altro oggetto.

Quando scrivi original_ref = new_value, il compilatore lo interpreta come original = new_value. La reference non cambia il bersaglio a cui punta; si limita a veicolare la modifica all’oggetto originale.

Reference e puntatori sono in gran parte interscambiabili, ma ognuno ha dei compromessi.

  • Usa le Reference di default: Se non hai bisogno della flessibilità di riassegnare il target o di gestire nullptr, le reference sono il go-to per la loro pulizia formale e sicurezza.
  • Usa i Puntatori: Se devi implementare algoritmi in cui il bersaglio cambia, come nell’iterazione o nelle strutture dati basate sui nodi (es. Liste Collegate, Alberi), dove il collegamento al “nodo successivo” deve poter essere aggiornato o impostato a nullptr alla fine della catena.