Здравствуйте Amor, Вы писали:
A>Не понял!
A>1) "Виртуальные базовые подобъекты" — в моем случае это класс А?
Да.
A>2) Какой смысл этого смещения?
A>Вообщем хотелось бы пояснее, пожалуйста. В итоге я хочу понять как из всей этой лабуды
какой нибудь далекий потомок понимает, что экземпляр класса А надо создать в единственном экземпляре (в случае множественного наследования)?
Вот на псевдокоде реализация того, о чем я говорил.
// class A
// {
// public:
// int i;
// };
struct _A
{
int i;
};
struct _B_vbtable
{
unsigned offset[1];
};
// class B : public virtual A
// {
// public:
// int j
// };
struct _B
{
_B_vbtable* _vbtable;
_A _a;
int j;
};
_B_vbtable vbtable_for_B = { offsetof(_B, _a) };
void _B_ctor(_B* p)
{
p->_vbtable = &vbtable_for_B;
}
int main()
{
// B b;
_B b;
_B_ctor(&b);
// b.i = 0;
((_A*)((char*)(&b) + b._vbtable->offset[0]))->i = 0;
}