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:
- Non possono essere nulli (a meno di forzature brutali o comportamenti indefiniti).
- 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!
Sintassi e Utilizzo
Section titled “Sintassi e Utilizzo”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 vs Puntatori: Quando usarli?
Section titled “Reference vs Puntatori: Quando usarli?”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
nullptralla fine della catena.