Array operations and 'Copy on Whatever'
Serg Kovrov
kovrov at no.spam
Thu Aug 3 16:15:20 PDT 2006
In my case it's more like 'copy on delete' then COW, but anyway... How
array concatenation, assignment, etc. are handled? Is it implemented on
'library level', or on 'language level'? I mean some operations silently
copies array contents, but some are not (eg. referencing). And I do not
see a pattern.
In particular, did array concatenation (~, ~=) make a copy of right operand?
Consider this example:
> char[][] array_of_strings;
>
> for (int i = 0; i < 10; i++)
> {
> char[] tmp = format("this is %d", i);
> array_of_strings ~= tmp;
> delete tmp; // <-- here
> }
>
> foreach (char[] str; array_of_strings)
> writefln("%s", str);
When I delete tmp, strings in array_of_strings being trashed.
But on the other hand, in more simple example:
> char[] s1 = "one";
> char[] s2 = "two";
> s1 ~= s2;
> delete s2;
Deleting s2 will not affect s1.
The first one is much simplified example reproducing a problem I have
encountered some time ago. As I do not understand how array operations
works and cant rely them, I have to .dup near every string involved.
Which seems no very smart.
So, Copy on Write, what does it mean in context of D/Phobos implementation?
Thanks
--
serg.
More information about the Digitalmars-d-learn
mailing list