Почему именно мне нужен явный прирост при реализации QueryInterface () в объекте с несколькими интерфейсами ()

Предположим, у меня есть класс, реализующий два или более COM-интерфейса:

class CMyClass : public IInterface1, public IInterface2 {
};

Почти каждый документ, который я видел, говорит о том, что когда я реализую QueryInterface () для IUnknown, я явно отклоняюсьэтот указатель на один из интерфейсов:

if( iid == __uuidof( IUnknown ) ) {
     *ppv = static_cast( this );
     //call Addref(), return S_OK
}

Вопрос в том, почему можноЯ просто копируюэтот?

if( iid == __uuidof( IUnknown ) ) {
     *ppv = this;
     //call Addref(), return S_OK
}

Документы обычно говорят, что если я сделаю последнее, я нарушу требование, что любой вызов QueryInterface () для того же объекта должен возвращать точно такое же значение.

Я нене совсем понимаю. Имеют ли они в виду, что если я QI () для IInterface2 и вызову QueryInterface () через этот указатель, C ++ пройдетэтот немного отличается от того, если я QI () для IInterface2, потому что C ++ будет каждый раз делатьэтот указать на подобъект?

Ответы на вопрос(2)

Ваш ответ на вопрос