Copy_costructor: shallow copy and deep copy
La copia di un oggetto può essere fatta o con il copy costruito o con l’operatore di assegnazione. Attenzione che se uso la seguente sintassi object p=o; NON USO l’operatore di assegnazione, ma il copy costructor.

Dato un oggetto o che contiene due attributi: int n, int *ptn, e dato un oggetto p copia di o
FACCIO UNA SHALLOW COPY (o copia superficiale)
quando copio in p il valore n di o e l’indirizzo XXXX di *ptn

FACCIO INVECE UNA DEEP COPY ( o copia profonda )
quando vado più a fondo cioè non copio l’indirizzo del puntatore ma vado in profondo a vedere il valore puntato dell’indirizzo, copiando il valore non l’indirizzo.
Quindi cosi facendo lascio slegati e indipendenti i due oggetti.

// // main.cpp // Copy_Costructor : copia superficiale e copia profonda // // Created by alessandro barazzuol on 07/01/2021. // #include <iostream> using namespace std; class object { public: int n; int *ptn; //costruttore object(){ ptn=new int(100); n=200; } //copy costructor: deep copy===clone() object( const object& o) { //cout<<"Passa\n"; this->n=o.n; ptn=new int(); *this->ptn=*(o.ptn); //this->ptn=o.ptn; } }; int main(int argc, const char * argv[]) { //originale object o; object p(o);//equivale a object p=o; uso il copy costructor //copia //object p=o;//usa copy costructor //p=o; qui non uso il copy costructor ma l'assegnazione //usa l'operatore assegnazione = cout<<"n di originale: "<<o.n<<" ptn originale: "<<*o.ptn<<endl; cout<<"n di copiato: "<<p.n<<" ptn copiato "<<*p.ptn<<endl; cout<<"Modifico l'originale\n"; int ass=999; o.n=888; *o.ptn=ass; //o.ptn=&ass; cout<<"n di originale: "<<o.n<<" ptn originale: "<<*o.ptn<<endl; cout<<"n di copiato: "<<p.n<<" ptn copiato "<<*p.ptn<<endl; return 0; }