Member Funktion schrottet Member Array
-
Hallo,
ich hab da ein sehr merkwürdiges Prob an dem ich gerade verzweifle.
Immer wenn ich eine Klasse implementiere, die ein usigned int* und einen operator=(Klasse a) enthält (der rest hat nichts mit meinem Prob zu tun), wobei der operator nur das Feld aus der übergebenen Instanz a in das eigene (this) kopieren soll wird dadurch die Instanz a, oder villeicht nur der Inhalt des Feldes von a geschrottet (der Zeiger bleibt unverändert nur der inhalt ist Müll und am ende kommt ne Fehlermeldung von wegen "Assertion failed")zum Beispiel so:
class a { private: int * s; public: void operator=(a e) { for(unsigned int d = 0; d < 3; d++) { s[d] = e.s[d]; } } }; void main() { a f, t; t = f; /* danach ist der Inhalt von f.s in t.s aber f.s ist schrott:rage: */ }
meiner Meinung nach kann es nicht an der Schleife liegen, zumal ich sie auch schon auf zwei andere Arten (im Assembler) implementiert habe, wobei das Ergebnis stets exakt das selbe war.
Ich habe den Code in BCB6, VC6 und VC.NET ausprobiert.Es wäre schön wenn mir da jemand helfen könnte.
Vielen Dank im Vorraus!
Apophis
-
s[d] = e.s[d];
Wer allokiert denn wo den Speicher auf dem du da rumackerst.
mfg JJ
-
Lord Apophis schrieb:
Es wäre schön wenn mir da jemand helfen könnte.
du brauchst ein gutes Buch
versuch mal so:#include <algorithm> #include <utility> class a { private: int * s; public: //constructor a() : s(new int[3]) { } //copy constructor a(const a &obj) : s(new int[3]) { std::copy(obj.s, obj.s + 3, s); } //destructor ~a() { delete [] s; } a &operator=(const a &obj) { a tmp = obj; std::swap(tmp.s, s); return *this; } };
-
@ Jhon Doe:
Sorry, die Kon- und Destrukoren hab ich wegegelassen, um auf den Punkt zu kommen, der Speicher wird natürlich vorher wie von ssm beschrieben reserviert, ich sollte mich villeicht nicht immer allzu kurz fassen.@ssm:
Danke, mit der Referenz funtzts.