Un costruttore di copie è una funzione speciale in C++ e in altri linguaggi influenzati da C++, che copia un oggetto di codifica. Il programmatore lo fa aggiungendo la dichiarazione del costruttore della copia e facendo riferimento a un oggetto. In primo luogo, questo avvantaggia il programmatore risparmiando tempo, ma assicura anche che il programmatore non inserisca la codifica dell’oggetto in modo errato. Quando la copia viene eseguita, deve avere un puntatore di memoria diverso o punterà alla stessa sezione a cui punta l’oggetto originale. Uno dei principali svantaggi dell’utilizzo dei costruttori di copie è che non possono funzionare in modo indipendente; se l’oggetto originale viene cancellato, lo sarà anche la copia.
Quando un programmatore usa un costruttore di copie, dice al codice di copiare un oggetto già elencato nel codice. Per fare ciò, il programmatore deve prima utilizzare una dichiarazione per indicare al codice di eseguire la funzione di copia. Il programmatore deve anche fare riferimento a un altro oggetto, quindi l’oggetto deve essere già stato creato o non ci sarà modo di eseguire la copia.
Il vantaggio principale dell’utilizzo di un costruttore di copie è che consente di risparmiare tempo. Invece di dover riscrivere di nuovo le stesse funzioni e codificare, il programmatore può semplicemente aggiungere un riferimento e l’oggetto sarà pronto. Questo ha un altro vantaggio nascosto nella codifica coerente e accurata. Finché l’oggetto originale è codificato correttamente, anche l’oggetto copiato avrà la codifica corretta. Entrambi questi vantaggi sono più evidenti con oggetti complessi, ma anche i programmatori possono trarre vantaggio dalla copia di oggetti semplici.
Nei linguaggi C++, molte funzioni richiedono un puntatore alla memoria. Questo dice alla funzione esattamente dove cercare nella memoria determinate informazioni o dove può memorizzare i dati. Il programmatore deve specificare un nuovo puntatore di memoria quando viene utilizzato un costruttore di copie; in caso contrario, i due oggetti utilizzeranno lo stesso spazio di memoria. In superficie, questo potrebbe non sembrare male, ma può portare a incongruenze. Ad esempio, se entrambi gli oggetti condividono lo stesso puntatore e un oggetto viene utilizzato per inviare domande di prestito mentre l’oggetto copiato viene utilizzato per inviare domande di carta di credito, tutte le domande di carta di credito verranno archiviate con le domande di prestito.
I programmatori devono stare attenti a cancellare un oggetto, perché gli oggetti del costruttore di copie non possono funzionare in modo indipendente. Se il programmatore cancella l’oggetto originale, l’oggetto copiato non avrà nulla a cui fare riferimento. Senza codice a cui fare riferimento, l’oggetto copiato non sarà in grado di svolgere il suo compito e diventerà inutile.