TITLE: Different object identities in multiple inheritance PROBLEM: A reason to avoid conventional multiple inheritance RESPONSE: Scott Meyers, "Effective C++", p 57,58. "The minute you start to use multiple inheritance, you must tell yourself for the fact that a single object can have more than one address, regardless of whether you are using virtual or nonvirtual base classes. Here is an example, class A {...}; class B : public A {...}; class C : public A {...}; class D : public B, public C {...}; If you create an object of class D, that object may have up to five different addresses, depending upon how its used: D d; // create object of class D D* p1 = &d; // p1 is address of D part of d B* p2 = &d; // p2 is address of B part of d C* p3 = &d; // p3 is address of C part of d A* p4 = (B*) &d; // p4 is address of A part of B part of d A* p5 = (C*) &d; // p5 is address of A part of C part of d Each of the five pointers [p1 - p5 ] points to the same object - d - but there is no guarantee that any two of the pointers will have the same value. In fact, its a sure bet that the two different A parts of d will have different addresses. If A were a virtual base class, then d might have only four different addresses, but clearly that wouldn't help the matter of object identity any."