On 09/12/2015 02:29 PM, Marco Leise wrote:

> Note that often the original dynamic array has additional
> capacity beyond its length. This can be used to ~= additional
> items without causing a reallocation, but is lost when you
> do the assignment "b = a".

Actually, the capacity is still there, useful to the runtime. Interestingly, the first dynamic array that is appended the new element becomes the owner of that capacity. The capacity of the other dynamic array becomes 0.

import std.stdio;

void main(){

  int [] a = [1,2,3,4,5];
  int [] b = a;

  writeln(a.ptr, " ", b.ptr);
  writeln(a.capacity, " ", b.capacity);
  a ~= 42;    // <-- change to b, now b owns the capacity
  writeln(a.ptr, " ", b.ptr);
  writeln(a.capacity, " ", b.capacity);
}

Ali

Reply via email to