Constructorul de copiere este necesară pentru a se asigura că putem crea o „reale“ (nu), bitmap-uri de până la o clasă de obiecte. Această copie a obiectului poate fi necesară în următoarele cazuri:
- când o funcție de transfer obiect de clasă ca parametru de valoare (mai degrabă decât prin referință);
- atunci când se întorc din clasa funcțiilor obiect ca urmare a activității sale;
- atunci când inițializarea un obiect de clasă de un alt obiect al acestei clase.
Folosind constructorul copy - o modalitate foarte bună de a obține în jurul valorii de aceste erori și probleme. Aceasta va crea o copie „reală“ a obiectului, care va avea o zonă privată a haldei.
Sintaxa constructorul de copiere arată astfel:
Să examinăm mai jos un exemplu simplu, dar foarte grăitor. În ea va fi revizuită la fiecare 3 cazuri în care este de dorit să se utilizeze constructorul copy. clasa va fi creat conține constructorul fără argumente, constructorul copy si destructor. Acest exemplu nu a fost prea greoaie, constructori și destructori va afișa un mesaj, cum ar fi „declanșat de designer“, „dektruktor activat“ ... aloca și memoria liberă nu va. Vom fi văzut perfect de câte ori și cât de mulți designeri vor lucra din nou destructor. Evident, destructor (în cazul în care eliberează o memorie) nu trebuie să lucreze mai multe ori decât constructorul alocă memorie.
Copy constructor in C ++
Executarea programului se va vedea consola după cum urmează:
Să vedem ce program generat la consolă. Bloc 1 - la crearea unui obiect nou, încărcați fără argumente pentru constructor. In blocul 2, am plasat funcția showFunc (). În timpul transmisiei în ea „parametrul obiect“ de valoare, el încarcă un constructor de copiere și de a crea o copie „reală“ de clasa obiectului OneClass. Când ieșiți din această funcție, destructor a lucrat ca o copie a obiectului este distrus. Apropo, faptul că transferul unui obiect ca parametru de valoare, determină constructorul de copiere, este o ocazie excelentă pentru a transmite un obiect de referință. Acest lucru va economisi timp si memorie.
În funcție blocul 3 aranjate returnObjectFunc (). Din moment ce corpul ei prevede crearea unei noi clase de obiecte OneClass - incarca primul argument nu-constructor. Ea continuă să funcționeze cod și în timpul revenirea obiectului în principal Funcția principală. copie de sarcină constructor. În cele din urmă, așa cum ar trebui să fie, destructor a lucrat de două ori pentru obiectul și copia sa reală.
În această situație, în cazul în care destructor eliberează memoria - a apărut o eroare în program.
Foarte recomanda pentru a citi subiectul constructorul de copiere în cartea lui Stephen Prata „limbajul de programare C ++. Prelegeri și exerciții. 6th Edition „. Ea a dezvăluit o mult mai profundă și include toate nuanțele de bază ale utilizării constructorului de copiere. Considerată în detaliu funcționarea de atribuire =.
În scopul de a menține site-ul nostru - click pe cutia de monede și alege orice mod convenabil.