Rainer Deyke wrote:
Denis Koroskin wrote:
Arrays in D are reference types. Besides, it's best to avoid hidden
allocations.

Arrays in D are reference types except when they're not.

int[] a = [5];
int[] b = a;
a[0] = 4;
assert(b[0] == 4);
a.length = 2;
assert(b.length == 1);
a[0] = 3;
// Is b[0] 3 or 4?



To be really pedantic about it, D's arrays aren't really reference types at all, but bear the *illusion* of reference semantics because of what they really are (a struct with a length field and a pointer field). In the above example, the value of b[0] depends on whether a was resized in place or not. Which is why slicing, albeit a fantastically useful feature, has to be handled with care.

-- Chris Nicholson-Sauls <ibisbasenji @ Google Mail>

Reply via email to