Virtual Method Table - Multiple Inheritance and Thunks

Multiple Inheritance and Thunks

The g++ compiler implements the multiple inheritance of the classes B1 and B2 in class D using two virtual method tables, one for each base class. (There are other ways to implement multiple inheritance, but this is the most common.) This leads to the necessity for "pointer fixups", also called thunks, when casting.

Consider the following C++ code:

D *d = new D; B1 *b1 = static_cast(d); B2 *b2 = static_cast(d);

While d and b1 will point to the same memory location after execution of this code, b2 will point to the location d+8 (eight bytes beyond the memory location of d). Thus, b2 points to the region within d which "looks like" an instance of B2, i.e., has the same memory layout as an instance of B2.

Read more about this topic:  Virtual Method Table

Famous quotes containing the words multiple and/or inheritance:

    Creativity seems to emerge from multiple experiences, coupled with a well-supported development of personal resources, including a sense of freedom to venture beyond the known.
    Loris Malaguzzi (20th century)

    Late in the afternoon we passed a man on the shore fishing with a long birch pole.... The characteristics and pursuits of various ages and races of men are always existing in epitome in every neighborhood. The pleasures of my earliest youth have become the inheritance of other men. This man is still a fisher, and belongs to an era in which I myself have lived.
    Henry David Thoreau (1817–1862)