Behaviour of append (~=)

Oskar Linde oskar.lindeREM at OVEgmail.com
Tue May 30 06:20:45 PDT 2006


Derek Parnell skrev:
> On Tue, 30 May 2006 21:37:02 +1000, Lionello Lunesu 
> <lio at lunesu.remove.com> wrote:
> 
>> Why does the appending to a 'null' array cause the contents to be copied?
>>
>> int[] ar1; // some array, not constant
>>
>> int[] ar2 = null;
>> ar2 ~= ar1;
>> // ar2 !is ar1
>>
>> But it could be like this:
>> if (ar2)
>>    ar2 ~= ar1;
>> else
>>    ar2 = ar1;
>>
>> Wouldn't it be a good optimization for ~= to check for null first, to 
>> prevent the copy?
> 
> Not so sure, because for consistency sake its good to know that 'append' 
> will always do a copy. Then we can rely on this to happen.

But does it? Isn't n repeated appends guaranteed to give at most log(n) 
allocations? How can that be if all appends force a copy? A simple test:

char[] a = "abcdefgh";
char[] b = a[0..3];
b ~= "xx";
writefln("a = %s",a);

prints:
abcxxfgh

/Oskar



More information about the Digitalmars-d-learn mailing list