En kopia konstruktor är en speciell medlem funktion inuti en klass . Den accepterar en referens till ett befintligt objekt av samma klass typ och gör en djup kopia av det objektet . En djup kopia inte bara kopierar alla medlemsländer fält men också kopierar något dynamiskt allokerat minne . C + + kompilatorer gör kopia konstruktion automatiskt . Du måste definiera en kopia konstruktor när din klass innebär dynamiskt minne . Saker du behöver
Intermediate C + + kunskaper
C + + kompilator , som Visual Studio 2008
Visa fler instruktioner
1
omdöme när man ska ringa en kopia konstruktör . Det finns tre lägen : . När du skapar ett objekt från ett befintligt objekt av samma typ , när du passerar ett objekt med värde till en funktion och när en funktion returnerar ett objekt
2
veta när din C + + klass behöver en kopia konstruktör . Det kokar ner till detta . Om din klass har pekare och det utför dynamisk minnesallokering , då måste du ge det ett uttryckligt kopieringskonstruktor . På ett exempel där man inte behöver definiera en konstruktor för
3
Look en C + + klass . Klass X har stack bara variabler och inga pekare . Ett grunt kopia är tillräcklig för att kopiera värdena för ett befintligt objekt till ett nytt objekt . Kompilatorn kan göra detta automatiskt , så du behöver inte definiera en kopia konstruktor för klassen X :
class X {
int num ,
allmänheten :
X ( ) : num ( 0 ) { }
~ X ( ) ;
};
4
studie ett exempel som kräver en explicit copy- constructor definition . Som ni kan se , är storleken på strängen , N , inte en hårdkodad värde utan bestäms av användaren . För att skapa B från A som i uttrycket " ZB ( A ) , " du måste tala om för kompilatorn hur mycket minne att fördela för B. ställe att göra detta är i kopieringskonstruktor , enligt följande :
klass Z {
int N ,
char * str ,
allmänheten :
Z ( int n ) : N ( n ) {
str = new char [ N ] ;
}
Z ( Z & andra ) {
str = new char [ other.GetLen ( ) ] ; Twitter //kopiera data från str av " andra " till str av " detta "
}
~ Z ( ) {
delete [ ] str ,
}
int GetLen ( ) const {
avkastning N ,
}
};
Addera