gpt4 book ai didi

c++ - 从基类虚拟继承

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:56:43 33 4
gpt4 key购买 nike

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

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

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

最佳答案

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

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

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

关于c++ - 从基类虚拟继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8694063/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com