Objekt listen (CArray) mit memcpy kopieren!!
-
Hallo ihr,
ich habe ein klasse A, die se Klasse enthält ein CArray mit dem Typ von Klasse B, welche wirderurm eine CArray enhält mit dem Typ Klasse C:
class C{ int ....; long ....; CString ...; . . . . }; class B{ CArray <C,C> ListeC; CString ...; int ....; . . . }; class A{ CArray <B,B> ListeB; };wenn ich nun das Objekt A erzeuge, welche in seiner CArray 10 B objekte enthäte, und jedes B objekt hat noch 20 C objekte!!
so nun möchte ich A mit memcpy kopieren.. geht das ? muss ja die größe wissen?
bisher hab ioch das mit einem Kopiecontrutor gemacht mit verschachtelten For schleifen!!
möchte es aber aus PErfomance gründe evtl. mit memcpy machen!!!
Halt jemand Vorschläge , Tipps??
Danke
-
Generell solltest du C++ Klassen NICHT per memcpy() und Konsorten kopieren - damit umgehst du deren Speicherverwaltung und schon sind Fehler vorprogrammiert (mit memcpy() kopierst du nur die internen Verwaltungsdaten des CArray<>, also arbeiten Original und Kopie auf den selben Daten und spätestens der Destruktor wird sich über Zugriffsfehler beschweren. Aber eigentlich sollte jede vernünftige Klasse auch einen eigenen Kopier-Konstruktor mitbringen, der in der Lage ist, diese Probleme zu umgehen. (wenn CArray das nicht bietet - nimm lieber std::vector<>)
-
Dafür gibt es einen Copy-Operator! memcopy geht (wie CStoll es schon schrieb, fast nie).
CArray hat IMHO keinen Copy-Operator aber Du kannst Funktion Append verwenden und damit den einen Aray an den "leeren" zweiten Array "anhängen"!
-
der zwueisungs Operator bzw. der Copycontruktor hab ich schon implementiert.. funktioniert auch einfwandfrei:)
Dachte nur Perfomance Technisch köntne man den ganzen sepicher block driekt mit memcpy kopieren, und könnt sich die fortschleifen süparen in der jees objekt einzeln kopiert wird.....
-
Das kann nicht gehen, wenn z.B. jedes Objekt einen eigenen Speicher verwaltet. Das kopieren eines Zeigers ist eben etwas anderes alsdas neuallokieren.