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

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

class CMyClass : public IInterface1, public IInterface2 {
};

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

if( iid == __uuidof( IUnknown ) ) {
     *ppv = static_cast<IInterface1>( 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)

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