|
|
|
|
|
by bubuga
3635 days ago
|
|
> Virtual inheritance means you have a diamond pattern and haven't separated your components properly. I've seen this argument pop out time and again as if it was a mantra of sorts, and more often than not it comes from someone with a background almost exclusively founded on Java. Their line of reasoning essentially boils down to "Java doesn't support it, the people behind Java said something about it, therefore it's bad". But C++ isn't Java, nor does Java dictate what is correct or what makes sense. Particularly when the only assertion you could come up with to criticize multiple inheritance was a comment that had nothing to do with C++ or even OO programming, but only to do with your personal taste regarding your superficial impressions regarding software design. |
|
Here's the issues I take with virtual inheritance:
1. It complicates the vtable and function/member calls leading to another level of indirection, so from a performance perspective it's a negative mark.
2. The more fundamental problem is that you've botched the hasA vs isA association. If you have two classes that share a base class then that base class should be refactored into a component that can then be used as a member without polluting the class hierarchy. This leads to better composability since you can now pass this object around without pulling a whole class hierarchy with it.
You're welcome to use virtual inheritance all you want in your projects but much like knowing what subset of C++ to use(and what not) you'll never see it in code I work on.