Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#22

AW: Datenkopie vom einen Record in ein anderes

  Alt 12. Jan 2015, 18:25
Und was willst du im Assign anders machen als die Objekt-Referenz kopieren (was die normale Zuweisung eben auch macht)
Evtl. Schauen, ob beim Zielrecord schon ein initialisiertes Objekt im Feld vorhanden ist und dann nicht einfach den Pointer überschreiben.
Warum nicht die Referenz einfach überschreiben? Der Record eignet sich doch eh nicht zur Lifetime-Verwaltung einer Objekt-Instanz. Vergisst du den Record passiert einfach nichts (gut der wird finalisiert, aber die Instanz wird nicht freigegeben).

Und dann werden die Felder eines Records nur bei einem gemanagten Typen initialisiert. Und eine Objekt-Instanz ist erst mit ARC gemanaget.
Delphi-Quellcode:
TFoo = record
  Instance : TObject; // ohne Zuweisung kann hier alles drin stehen!
  Str : string; // init mit ''
  Intf : IInterface; // init mit nil
  procedure Assign( Other : TFoo );
end;

procedure TFoo.Assign( Other : Tfoo );
begin
  if Assigned( Instance ) then
    FreeAndNil( Instance ); // das knallt wie ein Zufallsgenerator!
  Instance := Other.Instance;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat