Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.034 Beiträge
 
Delphi 12 Athens
 
#6

AW: Kann man statische Arrays so gleichsetzen?

  Alt 9. Okt 2014, 17:33
Statische Arrays werden sofort kopiert, genauso wie Records, Integer usw.

Was die Felder in den Records und statischen Arrays betrifft, da kommt es drauf an.
> Bei Strings wird nur der Referenzzeiger kopiert und die Referenzzählung hochgezählt, aber wenn man einen String verändert, dann wird er nur in dem entsprechenden Array geändert (CopyOnWrite).

Bei dynamischen Arrays wird nur der interte Zeiger kopiert und die Referenzzählung des Arrays hochgezählt.
Leider ist bei dynamischen Arrays das CopyOnWrite schon immer deaktiviert/futsch, womit bei Schreibzugriffen, auf den Array-Inhalt, das Arrays nicht automatisch kopiert wird, wenn der Referenzzähler größer 1 ist.

Wenn man also dynamische Arrays kopieren und die Inhalte "unabhängig" ändern will,
dann muß man das wirklich kopieren.
Delphi-Quellcode:
MeinString2 := MeinString2;
UniqueString(MeinString2); // das macht Delphi ja automatisch. (für Arrays ist diese Funktion aber nicht öffentlich zugänglich)
MeinString2[123] := 'a';

MeinDynamischesArray2 := Copy(MeinDynamischesArray1); //MeinDynamischesArray2 := Copy(MeinDynamischesArray1, 0, High(MeinDynamischesArray1));
MeinDynamischesArray2[123] := ...;

MeinStatischesArray2 := MeinStatischesArray1;
MeinStatischesArray2[123] := ...;

MeinRecord2 := MeinRecord1;
MeinRecord2.abc := ...;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 9. Okt 2014 um 17:56 Uhr)
  Mit Zitat antworten Zitat