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. (Nu uitați că obiectele temporare sunt create în mod automat să conțină valoarea de retur a funcției, iar acestea pot fi, de asemenea, produse în alte situații.)
classname (classname const o) // organism constructor
>
Inițializarea are loc în trei cazuri: atunci când un obiect inițializează altul, atunci când co-Pius obiect este transmisă funcției și atunci când un loc temporar (de obicei, în cazul în care servește ca valoare de retur). De exemplu, oricare dintre următoarele afirmații este inițializarea:
myclass x = y; // inițializarea
func (x); // parametru de transmisie
y = FUNC (); // 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 folosind noul operator și sprijinit de lucru cu un pointer la memoria alocată în facilitatea kazh-house.
/ * Acest program creează o clasă de matrice „sigure“.
Deoarece spațiul alocat matrice prin alocarea apoi noua, de memorie în cazul în care un obiect este folosit pentru a inițializa celălalt, cu condiția ca constructorul copy
* /
#include
#include
class matrice int p *;
int size;
publice:
array (int sz) p = new int [sz];
în cazul în care ieșirea (1) (p!);
size = sz;
>
array ()
// constructor de copiere
matrice (array const a);
void put (int i, int j) if (i> = 0 eu
int get (int i) întoarcerea p [i];
>
>;
/ / Constructor de copiere
array :: matrice (array const a) int i;
p = new int [a.size];
în cazul în care ieșirea (1) (p!);
pentru (i = 0; i
int main ()
num array (10);
int i;
pentru (i = 0; i<10; i++) num.put(i, i);
pentru (i = 9; i> = 0; Eu--) cout <
// a crea o altă matrice și inițializa valorile sale
num array x (num); // apel constructorul de copiere
pentru (i = 0; i<10; i++) cout <
>
Constructorul de copiere este alocat numai pentru inițializare. De exemplu, următoarele INST nu ruktsii conțin un constructor de copiere apel:
și matricea (10);
.
array b (10);
b = a; // constructorul de copiere nu produce
În acest caz, b = și efectuează o operație de atribuire. În cazul în care operatorul = nu este supraîncărcat, bit-copie se va face. Prin urmare, în unele cazuri, o repornire opera-tor =, în plus față de crearea unui constructor de copiere.