Member Initializer Lists
Le Member Initializer Lists (Liste di Inizializzazione dei Membri) sono il meccanismo primario in C++ per inizializzare in modo efficiente ed elegante i campi di una classe direttamente dal Costruttore.
Come abbiamo visto, a volte desideri la sicurezza che comporta avere una variabile membro marcata come const, ma al contempo vuoi poterle assegnare un valore iniziale a runtime (che venga passato dinamicamente tramite gli argomenti del costruttore). In C++ non puoi assegnare un valore a una variabile const all’interno del “corpo” del costruttore { } poiché a quel punto l’oggetto si considererà già parzialmente costruito e la modifica verrà respinta.
Sintassi delle Member Initializer Lists
Section titled “Sintassi delle Member Initializer Lists”Per impiegare una lista di inizializzazione, devi posizionare due punti (:) dopo la lista degli argomenti del costruttore. Dopodiché, elenchi i nomi delle variabili membro seguiti dalle parentesi graffe { } con i valori da assegnare, separate da virgole.
L’inizializzazione finisce all’inizio del corpo del costruttore.
Le liste di inizializzazione garantiscono due immensi vantaggi:
- Validità garantita: Tutte le variabili membro sono sicure ed effettivamente inizializzate e vivide prima dell’esecuzione del corpo del costruttore. Questo ti permette di concentrarti sulla logica anziché sul controllo degli errori.
- Efficienza: I membri vengono inizializzati una volta sola, mentre un assegnamento nel corpo del costruttore per un oggetto complesso (classe) implica prima chiamarne il costruttore vuoto, e successivamente riassegnarlo; un chiaro spreco.
Nota Bene: Devi dichiarare le inizializzazioni nella initializer list seguendo lo stesso esatto ordine in cui sono state dichiarate all’interno della struttura della classe. I costruttori di questi membri saranno chiamati rigorosamente in tale ordine.