The drawbacks are that
- All classes will have to initialize all its virtual bases all the time (e.g. if A is virtual base of B, and C derives from B, it also have to initialize A itself).
- You have to use more expensive
dynamic_cast
everywhere you use astatic_cast
(may or may not be the issue, depending on your system and whether your design requires it).
Point 1 alone makes it not worth it, since you can’t hide your virtual bases. There is almost always a better way.