bearophile Wrote: > Time ago I have told Walter that adding images with pointers and boxes to the > D docs, that represent the main data structures used in D, can help a lot the > understanding and usage of D. > > When you *see* the data structure in an image, understanding what happens and > how to write program gets easy. So I'd like to see images of the virtual > table, an object, interface, etc. > > A class reference is a pointer, that is the index (an integer number) of the > first byte of RAM of a segment of RAM. > > The segment of ram contains the class instance data, plus two more pointers > at its start, one to the virtual table, and one to the monitor. The virtual > table is a struct that contains indirect pointers to the virtual functions > and more. I don't know the layout of the virtual tables in dmd. And I have no > idea how the monitor is structured, it's a mystery for me still. I am > learning still. > > All the instances of a single class point to the same virtual table. > Instances of different classes contain pointers to different virtual tables. > All objects in D have a pointer to VPT, even classes with no virtual methods. > (Structs have no pointer to monitor and vtbl, but they can have a pointer to > outer scope if they are not static. This is true for classes too, and there > is a little more complexity coming from template instantiations inside > functions in D). > > When you instantiate a class you create a new section of memory that contains > the class members, plus the two pointers. > > You can have more than one reference to the same object. And two distinct > objects in memory can have the same data into their members. > > The "is" operator just compares the class instances, if they are equal (the > optimizer can avoid some tests if it knows the objects are surely different, > because it knows the static types). > > The == among class instances does several things. See D docs page about > operator overloading. But basically it tests if the references are the same. > If it's true, then they are two references to the same class instance, so > they must be equal, and the == returns true. > If the references are different it tests for equality of all members, and > returns true if they are all equal, otherwise false. > > Bye, > bearophile
I totally agree on the visual help! I think I'll create such a diagram after I get my brain mess cleaned up :) Your explanation doesn't differ (but does expand ;) from my understanding of the whole class implementation subject. I still do not know what a monitor is though ;)