Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky
recenziu , kedy volať kopírovacie konštruktor . Existujú tri situácie : . Pri vytváraní objektu zo existujúci objekt rovnakého typu , keď predáte objekt hodnotou na funkciu a ak je funkcia vracia objekt
2
Vedieť , kedy vaše C + + trieda potrebuje kopírovací konštruktor . To sa scvrkáva na to . Ak vaša trieda má ukazovatele a vykoná dynamického prideľovania pamäte , potom musíte dať explicitné kopírovacie konštruktor .
3
Pozrite sa na príklad , kde nemusíte definovať konštruktor C + + triedy . Trieda X má len zásobník premenné a žiadne odkazy . Plytkej kópie je dostačujúca skopírovať hodnoty z existujúceho objektu do nového objektu . Kompilátor môže to urobiť automaticky , takže nemusíte definovať konštruktor kópie pre triedu X :
triedy X {
int num ;
verejnosť :
X ( ) : num ( 0 ) { }
~ X ( ) ; }
,
4
Preštudujte príklad , ktorý si vyžaduje jednoznačnú špecifikáciu copy - konštruktory . Ako môžete vidieť , veľkosť reťazca , N , nie je pevne hodnotu , ale je určená pre užívateľov . Ak chcete vytvoriť B od A ako vo výraze " ZB ( A ) , " musíte povedať kompilátora , koľko pamäte prideliť pre B. miesto , ako to urobiť , je kopírovanie konstruktoru , takto :
trieda Z {
int N ;
char * str ,
verejnosť :
Z ( int n) : N ( n) {
str = new char [ N ] ;
}
z ( z & iné ) {
str = new char [ other.GetLen ( ) ] ;
//kopírovať dáta zo str " iný " na str " to "
}
~ Z ( ) {
delete [ ] str ;
}
int GetLen ( ) const {
návrat N ;
}
} ;