En kopi konstruktør er en spesiell medlem funksjon inne i en klasse . Det aksepterer en referanse til et eksisterende objekt av samme klasse type og gjør en dyp kopi av det objektet. En dyp kopi ikke bare kopierer alle medlemslandene felt, men også kopierer noe dynamisk allokert minne. C + + kompilatorer gjør kopi konstruksjon automatisk. Du må definere en kopi konstruktør når din klasse involverer dynamisk minne . Du trenger
Intermediate C + + kunnskap
C + + kompilator, som Visual Studio 2008
Vis flere instruksjoner
en
gjennomgang når du skal ringe en kopi konstruktør . Det er tre situasjoner: . Når du oppretter et objekt fra en eksisterende objekt av samme type, når du passerer et objekt av verdi til en funksjon og når en funksjon returnerer et objekt
2
vite når C + + klassen trenger en kopi konstruktør . Det koker ned til dette . Hvis klassen har pekere og den utfører dynamisk minne allokering , så må du gi den en eksplisitt kopi konstruktør .
3
se på et eksempel der du ikke trenger å definere en konstruktør for en C + + klassen. Klasse X har stable bare variabler og ingen pekere . Et grunt kopi er tilstrekkelig til å kopiere verdiene for et eksisterende objekt til et nytt objekt. Kompilatoren kan gjøre dette automatisk , slik at du ikke trenger å definere en kopi konstruktør for klassen X : en klasse X {
int num ;
publikum : en X ( ) : num ( 0 ) { } product: ~ X ();
};
4
Study et eksempel som krever en eksplisitt copy- konstruktør definisjon. Som du kan se, er størrelsen på strengen , N, ikke en hardkodet verdi, men bestemmes av brukeren . Å skape B fra A som i uttrykket « ZB ( A) ," du må fortelle kompilatoren hvor mye minne som skal tildeles B. sted å gjøre dette på er i kopien konstruktør , som følger : en klasse Z {
int N;
char * str ;
publikum:
Z ( int n ) : N (n ) {
str = new char [ N ];
}
Z (Z & andre) {
str = new char [ other.GetLen ( ) ]; Twitter //kopiere data fra str av "andre" til str av "dette"
}
~ Z ( ) {
delete [ ] str ;
}
int GetLen ( ) const {
retur N;
}
};