Hallo, alle zusammen!
Ich muss eine eigene Stringklasse schreiben und ich habe das Problem das der Kopierkonstruktor auch aufgerufen wird, jedoch die Daten auch kopiert werden (mit debugger getestet) allerdings nach dem kopieren irgendwie die Daten nicht da sind wo sie sein sollen.
Ein zweites Problem hier ist, das es den fall gibt das der Kopierkonstruktor zwar aufgerufen werden soll, aber er nichts kopieren soll. (siehe zweite Zeile in der main)
also hier die main:
Die Ausgabe dazu sieht so aus:
Hier der Konstruktor und der Zuweisungsoperator dazu:
Ich bräuchte mal einen Tip
[Edit:]Letzteres Problem habe ich mit der änderung des operators behoben:
[Edit 2:]
Sorry, manchmal bin ich ein wenig langsam...
Wieso sollte ich einen neuen String erstellen, wenn ich ihn doch nur zuweisen muss.
Hier mein jetziger Code:
Ich muss eine eigene Stringklasse schreiben und ich habe das Problem das der Kopierkonstruktor auch aufgerufen wird, jedoch die Daten auch kopiert werden (mit debugger getestet) allerdings nach dem kopieren irgendwie die Daten nicht da sind wo sie sein sollen.
Ein zweites Problem hier ist, das es den fall gibt das der Kopierkonstruktor zwar aufgerufen werden soll, aber er nichts kopieren soll. (siehe zweite Zeile in der main)
also hier die main:
Code:
int main(int argc, char **argv) {
String str1("original");
str1 = str1;
String str2;
str2 = str1;
cout << "Original: " << str1 << endl;
cout << "Kopie: " << str2 << endl;
return 0;
}
Code:
Kopiere...
Kopiere...
Original: original
Kopie:
Hier der Konstruktor und der Zuweisungsoperator dazu:
Code:
String::String (const String& other) {
if(this != &other) {
cout << "Kopiere..." << endl;
Len = other.Len;
pBuf = new char[Len+1];
strncpy(pBuf, other.pBuf, Len);
} else {
cout << "does not need to copy myself" << endl;
}
}
String& String::operator= (const String& other) {
String *sNew = new String(other);
// an dieser stelle ist der String korrekt kopiert (debugger)
return *sNew;
}
Ich bräuchte mal einen Tip
[Edit:]Letzteres Problem habe ich mit der änderung des operators behoben:
Code:
String& String::operator= (const String& other) {
if(this != &other) {
String *sNew = new String(other);
return *sNew;
}
return *this;
}
[Edit 2:]
Sorry, manchmal bin ich ein wenig langsam...
Wieso sollte ich einen neuen String erstellen, wenn ich ihn doch nur zuweisen muss.
Hier mein jetziger Code:
Code:
String& String::operator= (const String& other) {
if(this != &other) {
Len = other.Len;
if(pBuf) {
delete pBuf;
}
pBuf = new char[Len+1];
strncpy(pBuf, other.pBuf, Len);
}
return *this;
}
Zuletzt bearbeitet: