Setting array length to 0 discards reserved allocation?

Andrew Godfrey via Digitalmars-d digitalmars-d at puremagic.com
Fri Aug 1 01:51:35 PDT 2014


On Friday, 1 August 2014 at 07:51:32 UTC, Andrew Godfrey wrote:
> Going through other .dd files, I found an error in 
> expression.dd.
> It says "For static or dynamic arrays, identity is defined as 
> referring
> to the same array elements and the same number of elements."
>
> Well, in fact:
>
> unittest {
>     // expression.dd says that equality AND IDENTITY compare 
> elements and sizes, for both "static and dynamic arrays". Gaah!
>
>     int[] a = new int[3];
>     int[] b = new int[3];
>     assert(a == b);
>     assert(a !is b); // Nope! The doc is wrong!
>
>     // So then:
>
>     b = a;
>     assert(b is a); // Now b points to a, and 'is' does what 
> I'd expect.
>     // But evidently it's because it compared the array 
> references - not
>     // the elements and sizes!
> }
>
> I would NOT recommend updating the compiler to match what the 
> doc says.
> The current behavior is consistent with how assignment to an 
> array reference behaves.

Rereading this, the original text did say "refers to". So calling 
that an "error" may be a bit strong.


More information about the Digitalmars-d mailing list