Okay, so by using virtual inheritance, you have only one instance of Positionable
created for anything that is derived from either Positionable3D
or FeyPositionable
.
However, you also virtually inherit from Positionable3D
with Renderable3D
, and you virtually inherit from Positionable3D
and FeyPositionable
for the class FeyPositionable3D
.
This means that when you create an instance of FeyRenderable3D
, based on this reference, you are creating a storable instance of FeyRenderable3D
, an instance of Renderable3D
and FeyPositionable3D
, and an instance of all of their parents. Now, each time you virtually inherit, you are ensuring that no matter who inherits from who, only one instance of each class in your hierarchy is created. So, in conclusion, there should be no issue with your implementation, but you are creating a pretty wild set of vtables with virtual pointers criss-crossing all over the place.