У меня есть следующая иерархия COM-интерфейсов и класс, реализующий их:
interface IX : public IUnknown{};
interface IY : public IUnknown{};
class CA: public IX, public IY{};
Здесь class CA
эффективно наследуется от IUnknown
дважды.
Мы знаем, что в class CA
есть два указателя vtable - один указывает на IX
, а другой - на IY
. Таким образом, IUnknown
, хранящийся в подобъекте IX
, отличается от IUnknown
, хранящемся в подобъекте IY
.
Тем не менее, когда мы вызываем IX::QueryInterface()
или IY::QueryInterface()
для того же объекта и запрашиваем IUnknown
, мы получаем идентичные IUnknown*
указатели.
Почему это происходит?