c++ - 单一虚拟继承

标签 c++ virtual-inheritance

我理解基类的虚拟继承在多个派生类之间创建了一个公共(public)共享基类,从而解决了 DDD 问题。如果我的基类只有一个派生类,那么虚拟继承基类或非虚拟继承基类时有区别吗?基本上我试图理解查询中提供的解释 Is it possible to forbid deriving from a class at compile time?其中 Usage_lock 基类实际上是继承的,以防止从类 Usable 派生。如果我删除这个虚拟键,行为就会改变,即我能够从 Usable 派生子类。所以我想了解单继承场景中虚拟键造成的差异。

最佳答案

单个虚拟继承情况下的主要区别在于,只有最派生类调用虚拟继承基的构造函数,并且所有其他类都提供对构造类的引用(这发生在幕后)。

因此,在示例中,由于尝试进一步派生 Usable 将需要新类调用 Usable_lock 构造函数(它是私有(private)的),因此不可能从 Usable 派生的任何其他类。只允许 Usable 构造锁对象,因为它是锁的友元。

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

相关文章:

c++ - 多操作系统编译上的 boost::shared_ptr 与 std::tr1::shared_ptr

c++ - 避免虚拟基类的显式构造函数调用

c++ - 为什么他们更喜欢此代码段中的动态调度

c++ - 区分具有默认参数值的构造函数和空参数列表

c++ - 在 C++ 中从控制台读取未知数量的行

c++ - 是否需要从纯抽象类(接口(interface))进行虚拟继承

c++ - 在虚拟继承的情况下如何向下转换shared_ptr?

c++ - 为什么在写入不够大的 malloc 内存时 strcpy "work"?

c++ - 虚基类的构造函数参数

c++ - (Why) 纯虚派生类需要调用虚基类构造函数吗?