== Quote from Ivo Kasiuk (i.kas...@gmx.de)'s article > > I added the struct again and also ran without the enclosing X class. > > > > With X : > > no reference > > ========== reference, ad3fd0, ad3fc0, ad3fa0, ad3f80 > > new uint > > AA > > struct > > uint > > reference > > > > Without X : > > no reference > > ========== reference, ad2fd0, ad2fc0, ad2fa0, ad2f80 > > new uint > ... > No suprises with the struct. > And the "Without X" example... I am not sure, with the variables all in > the current stack frame that might be a special case. What about global > variables instead: Actually, those were global variables: I simply commented out the encapsulating class and constructor. But I left all the allocation in the main.. would that matter?
> ... > C c; > uint r; > S s; > uint[int] a; > uint* p; > uint[] arr; > void f() { > c = new C("reference"); > new C("no reference"); > r = cast(uint) cast(void*) new C("uint"); > s = S(cast(uint) cast(void*) new C("struct")); > a[0] = cast(uint) cast(void*) new C("AA"); > p = new uint; > *p = (cast(uint) cast(void*) new C("new uint")); > arr = new uint[1]; > arr[0] = (cast(uint) cast(void*) new C("array")); > } > void main(string[] args) { > f(); > GC.collect(); > writefln("========== %s, %x, %x, %x, %x, %x", > c.s, r, s.r, a[0], *p, arr[0]); > } > That gives me (with D2): > array > new uint > no reference > ========== reference, f74c3e20, f74c3e10, f74c3df0, f74 > c3dd0, f74c3db0 > AA > struct > uint > reference