On Monday, 30 April 2012 at 00:28:15 UTC, Jason King wrote:
myobject.sizeof returns 4 (in 32 bit DMD) for every object I've
tested, so I'm inclined to suspect its a bog-standard pointer,
just what I'm looking to save and retrieve.
Anybody else want to chime in?

 I'd say that's right and wrong. Someone correct me if I'm wrong.

The 4(bytes) is likely the fat pointer of the string. It still has to contain information saying it's this type of object, and inheritance if it was of another type. I believe it will be something like you have a 16 byte header specifying the object(s) information, and then the object data (4 bytes in this case). This is where it differs from C++ and acts more like java.

A heavy part of why this is the case is not only for casting up and down, but management of virtual functions (overloaded). Otherwise you get into C++'s old mess of needing to explicitly saying virtual for every function that 'MIGHT' be overloaded in the future.

 I haven't tested this, but you should get the idea.
 class A {}
 class BA : A{}

//returns a BA object from it's A superclass
 A test() {
  return cast(A) new BA();  //cast down
}

void test2() {
  A a = test();
BA ba = cast(BA) a; //fails if we have no information, we only see class A.
  assert(ba !is null, "Failed! ba not inherited from A?");
}

Reply via email to