【问题标题】:Virtual inheritance from base class基类的虚拟继承
【发布时间】:2012-01-01 16:14:32
【问题描述】:

AFAIK,虚拟继承解决了菱形问题,但是如果我使用虚拟来简单地从基类继承呢?在这里使用virtual 有什么区别?

class A 
{
    /* ... */
};

class B : virtual public A
{
    /* ... */
};

【问题讨论】:

    标签: c++ virtual-inheritance


    【解决方案1】:

    有一些不同之处。对象布局将不同(在虚拟继承的情况下,派生的子对象中将有一个额外的隐藏指针指向基类),子对象的初始化将不同(从B派生的类型必须调用@987654322 @构造函数直接在初始化列表中)。 B 成员函数中引用 A 成员(数据或函数)的任何代码都需要额外的间接(通过前面提到的指针),可能还有其他差异。

    虚拟继承是一个复杂的问题,您可能应该阅读更多在您的上一个问题的答案中提供的链接,而不是仅仅通过从单独的问题中获取零碎内容来理解它。

    提示:如果你想了解编译器如何处理虚拟继承的细节,你应该关注对象的内存布局。一旦你理解了为什么需要虚拟派生的每个类的额外指针,剩下的就很简单了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-07
      • 1970-01-01
      相关资源
      最近更新 更多