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_castWhile 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:
“There is a continual exchange of ideas between all minds of a generation. Journalists, popular novelists, illustrators, and cartoonists adapt the truths discovered by the powerful intellects for the multitude. It is like a spiritual flood, like a gush that pours into multiple cascades until it forms the great moving sheet of water that stands for the mentality of a period.”
—Auguste Rodin (18491917)
“It is very difficult to be wholly joyous or wholly sad on this earth. The comic, when it is human, soon takes upon itself a face of pain; and some of our griefs ... have their source in weaknesses which must be recognized with smiling compassion as the common inheritance of us all.”
—Joseph Conrad (18571924)