Hash Tables in D

Minas Mina via Digitalmars-d-announce digitalmars-d-announce at puremagic.com
Wed Jan 6 05:22:44 PST 2016


On Wednesday, 6 January 2016 at 12:19:45 UTC, Jacob Carlborg 
wrote:
> On 2016-01-05 15:44, Minas Mina wrote:
>
>> It won't, but to use it again you need to allocate a new one 
>> (If I'm not
>> mistaken).
>
> Not explicitly. I don't know if the runtime allocates a new 
> one. This works:
>
> void main()
> {
>     auto foo = ["foo" : 1];
>     foo = null;
>     foo["bar"] = 2;
>     assert(foo["bar"] == 2);
> }

I believe it does, check out this example:
import std.stdio;

class C
{
     int[int] squares;
}

void main()
{
     auto squares = [0 : 0, 1 : 1];

     C c = new C();
     c.squares = squares;

     writeln(c.squares is squares); // true

     squares = null;
     squares[10] = 100;
     writeln(c.squares is squares); // false
}

If the runtime used the same underlying memory, the second 
writeln() would print true, right?
So if I am correct, a new AA is allocated.


More information about the Digitalmars-d-announce mailing list