In C++, should I almost always use virtual inheritance?

前端 未结 2 752
囚心锁ツ
囚心锁ツ 2020-12-10 00:30

I see from this entry that virtual inheritance adds sizeof(pointer) to an object\'s memory footprint. Other than that, are there any drawbacks to me just using virtual inher

相关标签:
2条回答
  • 2020-12-10 01:17

    The drawbacks are that

    1. 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).
    2. You have to use more expensive dynamic_cast everywhere you use a static_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.

    0 讨论(0)
  • 2020-12-10 01:19

    In my experience, virtual inheritance (as opposed to virtual methods) is almost never needed. In C++ it's used to address the "diamond inheritance problem", which if you avoid multiple inheritance cannot actually happen.

    I'm pretty sure that I've never encountered virtual inheritance outside C++ books, which includes both code I write and million+ line systems I maintain.

    0 讨论(0)
提交回复
热议问题