Und Achtung, "normale" dynamische Arrays haben keine Referenzkontrolle in den Schreibzugriffen implementiert.
(Strings sind zwar auch "nur" dynamische Arrays, aber diese besitzen soeine Kontrolle)
Delphi-Quellcode:
var
a, b: array of Integer;
SetLength(a, 10);
a[5] := 20;
b := a;
b[5] := 30;
ShowMessage(IntToStr(a[5])); // a[5] = 30 ???
SetLength(a, 10);
a[5] := 20;
b := a;
SetLength(b, Length(b)); // vor Schreibzugriffen auf ein Array
b[5] := 30;
ShowMessage(IntToStr(a[5])); // juhu, a[5] ist noch 20 :)
Auch gibt es ein immernoch nicht behobenes Compiler-Problem, wenn in dem Record nur ein Array und kein weiteres Feld enthalten ist.
PS: von mir gammeln in der
DP einige Prototypen/Vorlagen rum, für derartige Typen.