On 05 Feb 2009, at 05:55, David Emerson wrote:

"Dynamic arrays are reference counted: assignment of one dynamic
array-type variable to another will let both variables point to the
same array. Contrary to ansistrings, an assignment to an element of one
array will be reflected in the other: there is no copy-on-write."

This is fine, but what is strange is that calling setlength DOES perform
copy-on-write!

var a, b : array of longint;
begin
 setlength (a,2);
 b := a;
 setlength (a,5);
 writeln (length(b));   // I get 2, not 5
end.


Why this inconsistency?

It's the way Delphi works. In fact, calling setlength is /the/ way to make a dynamic array unique (afaik, the only alternative is calling copy, but that's slower in case the array already was unique.


Jonas
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to