Code:
SomeClass ** copy;
copy = new SomeClass*[SIZE]; //alloziere Pointerarray
for( int i = 0; i < SIZE; i++)
{
copy[i] = new SomeClass; //alloziere Objekt
* copy[i] = * object[i]; //erstelle eine Kopie
}
Das kann Speicherlecks verursachen wenn irgendeine, abgesehen von der ersten new-Operation fehlschlägt. Denn in dem Fall wird nirgendwo der Speicher freigegeben. In "Produktionscode" solltest du irgendwie damit umgehen.
Code:
for( int i = 0; i < SIZE; i++)
{
SomeClass * swap = object[i]; //merke die Pos. des Originals
object[i] = copy[i]; //ersetze das Original durch die Kopie
copy[i] = swap; //speichere die Pos. d. Originals
}
Jetzt hast du die Element in "object" und die in "copy" ausgetauscht. Das ist soweit Okay, aber bist du dir sicher, dass du die Elemente in "object" auch wieder freigibst?
Code:
for( int i = 0; i < SIZE; i++ )
delete [] copy[i];
delete [] copy;
Da steckt mit großer Wahrscheinlichkeit ein Fehler drin, und wenn ja, dann ist es ein schwerwiegender: Es sieht so aus, als ob du Elemente die mit "new" angelegt wurden, mit "delete[]" wieder freigegeben werden sollen. Das geht nicht.
Zitat:
Zitat von peschmae
eventuell macht da der Zuweisungsoperator was blödes? Wieso verwendest du nicht direkt den Copy-Constructor?
copy[i] = new SomeClass(*object[i]);
Weil ich den Operator überschrieben habe. Denn es müssen nicht alle Members kopiert werden. Viele können auch einfach auf 0 stehen, da sie eh gleich neu berechnet werden müssen.
Hört sich nicht gut an. Ich halte es für wahrscheinlich, dass du irgendwelche kruden Sachen mit Copy-Constructor oder Zuweisungsoperator machst. Überleg mal, ob man das nicht doch verbessern kannst. "Überschrieben" ist übrigens ein Ausdruck den du nicht verwenden solltest. Es ist nicht klar was du damit meinst, z.B. könnte sowohl die Bedeutung von "Überladung" also auch von "Overriding" in Frage kommen. Ich würde im Allgemeinen ja von "override" ausgehen, aber in deinem Beispiel scheint das irgendwie nicht zu passen, denn ein Copy-Constructor kann ja nicht virtuell sein, und virtuelle Zuweisungsoperatoren trifft man in in "freier Wildbahn" selten an.
Lesezeichen