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<>)


  • Mod

    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.....


  • Mod

    Das kann nicht gehen, wenn z.B. jedes Objekt einen eigenen Speicher verwaltet. Das kopieren eines Zeigers ist eben etwas anderes alsdas neuallokieren.


Anmelden zum Antworten