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 := ...;