array initialization problem

Chris Nicholson-Sauls ibisbasenji at gmail.com
Tue Jan 20 22:27:35 PST 2009


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>


More information about the Digitalmars-d-learn mailing list