Es geht aber auch nur, weil die das CopyOnWrite bei diesen dynamischen Arrays "kaputt" ist.
Im Prinzip wird beim Entritt in diese Methode, da kein CONST, die Referenzzählung erhöht.
Beim Schreibzugriff auf das Feld müsste aber gemerkt werden, daß hier RefCount <> 1 ist und somit müsste vor dem Schreibzugriff eine Kopie erstellt werden, wo dann erst reingeschrieben wird.
Und ich hoffe immernoch, daß dieser Fehler, auch nach jahrzehnten, irgendwann mal repariert wird,
wobei ich jetzt nicht sagen kann, ob er das nicht schon wurde ... zumindestens in den Compilern für OSX, iOS und Android.
Delphi-Quellcode:
var
A, B: TIntegerDynArray;
begin
SetLength(A, 1);
A[0] := 1;
B := A; // B := Copy(A);
B[0] := 2;
WriteLn(A[0], ' ', B[0]); // 2 2
ReadLn;
end.
Mit dem Copy-Bugfix "1 2".