?
Cre schrieb:
Das Prinzip ist mir relativ klar, aber das Objekt "a" wird doch ohnehin nachdem "assign" ausgeführt wurde gelöscht. Von daher kann ich nachvollziehen, dass die Pointer vertauscht werden (alter Speicherplatz wird gelöscht ), aber wieso weise ich dem Objekt a noch die Zeilen und Spalten zu, wenn a ohnehin nach assign nicht mehr existiert? Zur Löschung benötige ich doch nur den Pointer (die alte "Startadresse" des Arrays"), oder inwiefern vertue ich mich ?
Dein Code, Deine Regeln.
Aber selbst, wenn Du swap() nur in assign() aufrufst, finde ich die Benamsung irritierend - ein swap() , dass ein bisschen tauscht...
Wenn Du Dein assign() mit swap() schreiben willst, dann mit std::swap nur auf den Speicher
Array2D& assign(Array2D a)
{
using std::swap;
zeilen = a.zeilen;
spalten = a.spalten;
swap(ptr, a.ptr);
return *this;
}
o.ä.
Finde ich persönlich auch nicht sofort ersichtlich, wie und warum da was passiert, aber immerhin.
Dein swap() sollte aber wirklich komplett tauschen - so dass überall die Invariable "ptr zeigt auf Speicher der Größe spalten*zeilen" gilt. Alles andere wird Dir auf die Füße fallen.
MichelRT schrieb:
Array2D& assign(Array2D a)
{
zeilen = a.zeilen;
spalten = a.spalten;
ptr = a.ptr;
return *this;
}
Da ist doch ein double delete vorprogrammiert.