Am 2014-02-10 09:13, schrieb Michael Van Canneyt: >> No. There is no COW, only ref. counting. SetLength just forces an unique >> instance of the array if needed. > The documentation explicitly mentions that: > '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.'
But what do these sentences say? They say that there is *no* copy-on-write. So why does it suddenly do copy-on-write when using SetLength? SetLength is a write to the array. It adds (or removes) elements. So why do I get a copy? The documentation says that I will *not* get a copy (no COW). So the documentation is wrong (or at least totaly misleading/incomplete). > But I have added a paragraph about the "reset ref. count" behaviour of setlength. What has a reference counter to do with the behaviour I see? If SetLength would just simply change the number of elements it would not change a reference counter. So nothing else happens, just elements are added or removed. The same as when I change an element. At least that's what the documentation says (to me). _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal