Constructorul de copiere

În cazul în care funcția returnează un obiect care creează automat un obiect temporar care conține valoarea de returnare. Este de fapt acest obiect returnat de funcția. Odată ce valoarea este returnată, obiectul este distrus. Distrugerea obiectului temporar poate provoca reacții adverse neașteptate în unele situații. De exemplu, în cazul în care rentabilitatea de obiect funcția are un destructor eliberează de memorie rezervată dinamic, această memorie va fi eliberat chiar și în cazul în care obiectul care primește valoarea întoarce-emoe va continua să-l folosească. Supraîncărcarea operatorului de atribuire și definiția constructorului copie a depăși această problemă.

Dacă două obiecte au același tip, aveți posibilitatea să atribuiți un obiect la altul. Acest lucru înseamnă că datele obiectului de pe partea dreaptă a egalității vor fi copiate datele obiect de pe partea stângă a egalității. De exemplu, următorul program afiseaza valoarea 99:

void set_i (int n)

myclass OB1, OB2;

OB2 = OB1; // atribuirea OB1 Ob2 obiect de date

cout <<"this is ob2's i: " <

În mod implicit, toate datele sunt atribuite unui obiect de către un alt copiator bitmap Bani. Cu toate acestea, este posibil să supraîncărca operatorul de atribuire și definirea unor alte proceduri de atribuire.

Problema de același tip poate să apară în două cazuri. Primul dintre acestea are loc atunci când copia obiectului este creată prin transmiterea în funcția obiectului ca argument. Al doilea caz se produce atunci când obiectul temporar este de a crea o funcție care returnează un obiect ca valoare.

classname (classname const obj)

Inițializarea are loc în trei cazuri: când un obiect inițializează altul atunci când co-Pius obiect este trecut la funcția și atunci când un loc temporar (serveste de obicei ca o valoare de întoarcere). De exemplu, oricare dintre următoarele afirmații este inițializarea:

myclass x = y; // inițializarea

F (x); // parametru de transmisie

I = F1 (); // obține obiect temporar

Mai jos este un exemplu în cazul în care este necesar în mod explicit constructorul de copiere. Acest program este co-çäàåò foarte simplu de tip „sigur“ de o serie de numere întregi, care împiedică ieșirea matrice de margine-tzu. Memoria este alocată pentru fiecare matrice cu ajutorul noului operator și în fiecare locație acceptată de lucru cu un pointer la memoria alocată.

articole similare