struct to/from void, object to/from void
Era Scarecrow
rtcvb32 at yahoo.com
Sun Apr 29 18:01:50 PDT 2012
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?");
}
More information about the Digitalmars-d-learn
mailing list