memset and related things

bearophile bearophileHUGS at lycos.com
Wed Sep 23 09:09:16 PDT 2009


Jeremie Pelletier:

> No need to store a reference within the object, that would still require 
> another heap allocation killing the need for scope in the first place.

Probably you have not understood what I meant. I surely didn't meant that it needs another heap allocation (the purpose of scope is to avoid that).

Such extra invisible reference field among that object attributes is not necessary, but it makes things simpler. If you add such reference, then inside the outer object you have the inner object followed by the reference to the inner object, both inlined (so no other heap allocations are necessary). So you can keep all the usual semantics of D objects, avoid most special-casing. So for example you can assign a different object to such reference:

class C1 { int x, y, z; }

class C2 {
  scope C1 c1;
}

void main() {
  auto c2 = new C2;
  auto c = new C1;
  c2.c1 = c; // <--- see here
}

Now the memory of c1 inside c2 is not reachable anymore, so the destructor of that inner object can be called by the GC, but of course its actual memory will not be freed until c2 is deallocated.

Bye,
bearophile



More information about the Digitalmars-d mailing list