Виртуальное наследование в C ++

Я обнаружил это на веб-сайте, когда читал о виртуальном наследовании в C ++

Когда используется множественное наследование, иногда необходимо использовать виртуальное наследование. Хорошим примером для этого является стандартная иерархия классов iostream:

//Note: this is a simplified description of iostream classes

class  ostream: virtual public ios { /*..*/ }
class  istream: virtual public ios { /*..*/ }

class iostream : public istream, public ostream { /*..*/ } 
//a single ios inherited

Как C ++ гарантирует, что существует только один экземпляр виртуального члена, независимо от количества классов, производных от него? C ++ использует дополнительный уровень косвенного обращения к виртуальному классу, обычно с помощью указателя . Другими словами, каждый объект в иерархии iostream имеет указатель на общий экземпляр объекта ios. Дополнительный уровень косвенного обращения имеет небольшие накладные расходы на производительность, но это небольшая цена.

меня смущает утверждение:

C ++ использует дополнительный уровень косвенного обращения для доступа к виртуальному классу, обычно с помощью указателя

может кто-нибудь объяснить это?

12
задан curiousguy 7 June 2016 в 02:56
поделиться