Puntatori vs reference
Visto che per le funzioni e` possibile scegliere tra puntatori e riferimenti,
come decidere quale metodo scegliere? I riferimenti hanno un vantaggio sui puntatori,
dato che nella chiamata di una funzione non c'e` differenza tra passaggio per
valore o per riferimento, e` possibile cambiare meccanismo senza dover modificare
ne` il codice che chiama la funzione ne` il corpo della funzione stessa. Tuttavia
il meccanismo dei reference nasconde all'utente il fatto che si passa un indirizzo
e non una copia, e cio` puo` creare grossi problemi in fase di debugging.
Quando e` necessario passare un indirizzo e` quindi meglio usare i puntatori,
che consentono un maggior controllo sugli accessi (tramite la keyword const )
e rendono esplicito il modo in cui il parametro viene passato. Esiste comunque
una eccezione nel caso dei tipi definiti dall'utente tramite il meccanismo delle
classi. In questo caso vedremo che l'incapsulamento garantisce che l'oggetto
passato possa essere modificato solo da particolari funzioni (funzioni membro
e funzioni amiche), e quindi usare i riferimenti e` piu`conveniente perche`
non e` necessario dereferenziarli, migliorando cosi` la chiarezza del codice;
le funzioni membro e le funzioni amiche, in quanto tali, sono invece autorizzate
a modificare l'oggetto e quindi quando vengono usate l'utente sa gia` che potrebbero
esserci effetti laterali.
Non si tratta comunque di una regola generale, come per tante altre cose, i
progettisti del linguaggio hanno pensato di non limitare l'uso dei costrutti
con rigide regole e schemi predefiniti, ma di lasciare al buon senso del programmatore
il compito di decidere quale fosse di volta in volta la soluzione migliore.
|