@Steve_The_Cynic said in Enlightened:
The obvious one is IUnknown, of course. My top-level C++ (D)COM object code has several IThingyWhatsit interfaces and they all derive non-virtually from IUnknown so there will be several copies of IUnknown's vtable pointer (updated by each of the derived interface classes and also by the top-level object itself) in the top-level object.
Hence the important notion of "the controlling IUnknown" that's used as the definitive address of an object; and the fact you can't compare two COM object references without asking each for its controlling IUknown first (which is what IsEqualObject does).
C++ does have a similar mechanism, but it's used only for dynamic_cast, which contributes to make unnecessary reinterpret_cast usage a major no-no.