Estevan Utente adolescente
Registrato: 28/12/03 21:12 Messaggi: 310 Residenza: Sant'imbù Al d'emagna
|
Inviato: Mer Lug 05, 2006 12:24 am Oggetto: |
|
|
Costruttore di copia
Uno dei costruttori più importanti da modificare tramite overloading è il
costruttore di copia. Tale costruttore evita che sorgano problemi quando si usa
un oggetto per inizializzarne un altro.
Normalmente quando si usa un oggetto per inizializzarne un altro, C++
prevedel'esecuzione di una copia bit a bit, cioè la destinazione sarà una copia
identica dell'oggetto utilizzato per l'inizializzazione. Questo comportamento è
appropriato nella maggior parte dei casi, in alcuni casi (es. allocazione
dimanica) non si deve usare la copia bit a bit.
Si supponga che la classe Class allochi un'area di memoria. Sia A un'instanza diClass
Codice: |
Class A;
Class B = A;
|
Se viene eseguita una copia bit a bit, allora B sarà una copia esatta di A, cioè B
utilizzerà la stessa memoria allocata per A, non una propria area distinta.
Se venisse invocato il distruttore di A (che rilascia l'area allocata)
automaticamente verrebbe eliminata anche l'area “allocata” da B.
Per risolvere questo problema il C++ consente di creare un costruttore di copie
che il compilatore impiega quando si usa un oggetto per inizializzarne un altro.
Esso viene inmpiegato al posto del costruttore bit a bit.
Codice: | classname (const classname& obj){} |
oppure facendo l'overloading degli operatori in questo modo (ridefinisce il
comportamento dell'operatore =)
Codice: | classname& operator=(const classname& obj){}; |
E' importante comprendere che C++ definisce diversi tipi di situazioni in
cui a un oggetto viene assegnato il valore di un altro oggetto.
Il primo caso è l'assegnamento, il secondo è l'inizializzazione che può verificarsimin tre modi:
1.oggetto inizializza esplicitamente un altro oggetto
2. eseguita copia di un oggetto che deve essere passato ad una funzione
3.creazione di un oggetto temporane (val. restituito da una funzione)
y = funct(); _________________ http://email2image.altervista.org
Protect your mail against spam!! |
|