Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by himitsu,
27. Aug 2012
Zuweisungen auf den kompleten Inhalt sind etwas Anderes.
Das funktioniert auch bei (einfachen) dynamischen Arrays ordnungsgemäß.
var
A, B: array ob Byte;
SetLength(A, 3);
A := 123;
A := 456;
A := 798;
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by himitsu,
27. Aug 2012
Bin darüber leider auch schon gestolpert und voll auf die Fresse gefallen, weil ich damit gerechnet hatte, daß es automatisch umkopiert wird.
Ist richtig toll, weil ich mich nun selber darum kümmern mußte.
Für Strings gibt es UniqueString, womit man dafür sorgen kann, daß es nur eine Referenz in dieser Variable gibt, also falls man mal über wilde Pointer schreibend auf den Stringinhalt...
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by himitsu,
27. Aug 2012
Wäre schön, wenn es so wäre, aber probier es ruhig mal aus. (siehe ein paar Posts weiter vorne)
Copy-On-Write ist leider nicht aktiv :wall:
Wäre ja zu praktisch, wenn es einen Compilerschalter gäbe, um das für alle/bestimmte Arrays zu aktivieren.
Ein LongString (AnsiString und UnicodeString) ist ja auch "nur" ein (etwas aufbemotztes) dynamisches Array of Char (außer daß der Index bei 1...
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by himitsu,
27. Aug 2012
Ja
und ja, es kopiert den internen Zeiger und zählt die Referenzzählung hoch, also genauso wie beim langen String.
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by himitsu,
27. Aug 2012
SetLength(A, 0); ist nicht das Gleiche wie A := nil;, aber es kommt das selbe Ergebnis bei raus.
:=nil ruft direkt DynArrayClear auf, wärend SetLength bei 0 an DynArrayClear weiterleitet und sonst was Anderes macht.
@Jonas Shinaniganz: Nein, dem ist nicht so, denn "billige" Pointer besitzen keine Referenzzählung.
Es werden nur Referenzen der Array-Variablen gezählt.
PS: Ihr müßt bei...