Virtual inheritance is not without the cost of execution time, but the reason for this cost is not increased flexibility, but the resolution of ambiguity.
, , , C A . A::foo C ( ). this, -. , , , A C, , this - , , .
, A::foo C, C. : , , - this, A , , , A C.
class A {
public:
void foo();
[...]
};
class B1 : public A {};
class B2 : public A {};
class C : public B1, public B2 {};
C c;
B1* b1 = &c;
B2* b2 = &c;
b1->foo();
b2->foo();
virtual . A . A::foo, , . C A .
class B1 : virtual public A {};
class B2 : virtual public A {};
[...]
C c;
B1* b1 = &c;
B2* b2 = &c;
b1->foo();
b2->foo();