Skip to content

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.

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:

  1. 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.
  2. 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.