Eine Kopie Konstruktor ist eine spezielle Member-Funktion innerhalb einer Klasse . Er akzeptiert einen Verweis auf ein bestehendes Objekt der gleichen Klasse Typ und macht eine tiefe Kopie des Objekts . Eine tiefe Kopie kopiert nicht nur alle Mitglied Felder , sondern auch kopiert keine dynamisch zugewiesenen Speicher . C + +-Compiler zu tun Kopie Konstruktion automatisch . Sie müssen eine Kopie Konstruktor definieren, wenn Ihre Klasse beinhaltet dynamischen Speicher . Dinge, die Sie brauchen
Intermediate C + + Kenntnisse
C + +-Compiler , wie Visual Studio 2008
anzeigen Weitere Anweisungen
1
schreiben , wenn Sie eine Kopie Konstruktor aufrufen . Es gibt drei Situationen : . Wenn ein Objekt aus einem vorhandenen Objekt desselben Typs , wenn Sie ein Objekt per Wert an eine Funktion übergeben und wenn eine Funktion ein Objekt zurückgibt
2
wissen, wann Ihr C + + Klasse muss eine Kopie Konstruktor . Es läuft darauf hinaus, diese . Wenn Ihre Klasse hat Zeiger und er führt dynamische Speicherzuweisung , dann müssen Sie ihm eine explizite Copykonstruktor .
3
Blick auf ein Beispiel , wo Sie nicht haben, um einen Konstruktor für definieren eine C + + -Klasse. Klasse X hat nur stapeln Variablen und keine Zeiger . Eine flache Kopie ist ausreichend, um die Werte eines vorhandenen Objekts auf ein neues Objekt zu kopieren. Der Compiler kann dies automatisch , so dass Sie nicht haben , um eine Kopie Konstruktor für die Klasse X definieren : class X { int num
;
public:
X () : num (0) {}
~ X (); }
;
4
Study ein Beispiel, das eine explizite copy- Konstruktor Definition erfordert . Wie Sie sehen können , ist die Größe der Zeichenfolge , N, nicht einen hart codierten Wert, sondern wird vom Benutzer bestimmt. Um B von A wie im Ausdruck erstellen "ZB (A) ," Sie haben , um den Compiler zu sagen, wie viel Speicher für B. zuweisen Der Ort , dies zu tun ist in der Copy-Konstruktor wie folgt: Klasse Z { int
N;
char * str;
public:
Z (int n ) : N ( n ) {
str = new char [ N] ; }
Z ( Z & andere ) {
str = new char [ other.GetLen ()] ; Twitter //kopieren von Daten aus dem str von " anderen " auf die str von " dieser "
}
~ Z () {
delete [] str; }
int GETLEN ( ) const {
Rückkehr N; }
};