Condividi tramite


Funzioni membro speciali

Le funzioni membro speciali sono funzioni membro di classe (o struct) che, in alcuni casi, il compilatore genera automaticamente. Queste funzioni sono il costruttore predefinito, il distruttore, il costruttore di copia e l'operatore di assegnazione di copia e il costruttore di spostamento e l'operatore di assegnazione di spostamento. Se la classe non definisce una o più funzioni membro speciali, il compilatore può dichiarare in modo implicito e definire le funzioni usate. Le implementazioni generate dal compilatore sono denominate funzioni membro speciali predefinite . Il compilatore non genera funzioni se non sono necessarie.

È possibile dichiarare in modo esplicito una funzione membro speciale predefinita usando la parola chiave = default . In questo modo il compilatore definisce la funzione solo se necessario, allo stesso modo di se la funzione non è stata dichiarata affatto.

In alcuni casi, il compilatore può generare funzioni membro speciali eliminate , che non sono definite e pertanto non chiamabili. Ciò può verificarsi nei casi in cui una chiamata a una particolare funzione membro speciale in una classe non ha senso, date altre proprietà della classe. Per impedire in modo esplicito la generazione automatica di una funzione membro speciale, è possibile dichiararla come eliminata usando la parola chiave = delete .

Il compilatore genera un costruttore predefinito, un costruttore che non accetta argomenti, solo quando non è stato dichiarato alcun altro costruttore. Se è stato dichiarato solo un costruttore che accetta parametri, il codice che tenta di chiamare un costruttore predefinito fa sì che il compilatore generi un messaggio di errore. Il costruttore predefinito generato dal compilatore esegue un'inizializzazione predefinita semplice a livello di membro dell'oggetto. L'inizializzazione predefinita lascia tutte le variabili membro in uno stato indeterminato.

Il distruttore predefinito esegue la distruzione a livello di membro dell'oggetto. È virtuale solo se un distruttore della classe di base è virtuale.

Le operazioni di creazione e assegnazione di copia e spostamento predefinite eseguono copie o spostamenti di membri di dati non statici. Le operazioni di spostamento vengono generate solo quando non viene dichiarata alcuna operazione di distruttore o spostamento o copia. Un costruttore di copia predefinito viene generato solo quando non viene dichiarato alcun costruttore di copia. Viene eliminato in modo implicito se viene dichiarata un'operazione di spostamento. Un operatore di assegnazione di copia predefinito viene generato solo quando non viene dichiarato esplicitamente alcun operatore di assegnazione di copia. Viene eliminato in modo implicito se viene dichiarata un'operazione di spostamento.

Vedi anche

Riferimenti al linguaggio C++