C++ C+中虚拟公共类的副作用+;

C++ C+中虚拟公共类的副作用+;,c++,class,virtual,C++,Class,Virtual,用于类以确保类的对象仅继承一个子对象 class L { /* ... */ }; // indirect base class class B1 : virtual public L { /* ... */ }; class B2 : virtual public L { /* ... */ }; class D : public B1, public B2 { /* ... */ }; // valid 当我们不将虚拟公共用于单个继承时,使用虚拟公共是否会产生副作用。例如,是 class

用于类以确保类的对象仅继承一个子对象

class L { /* ... */ }; // indirect base class
class B1 : virtual public L { /* ... */ };
class B2 : virtual public L { /* ... */ };
class D : public B1, public B2 { /* ... */ }; // valid
当我们不将虚拟公共用于单个继承时,使用虚拟公共是否会产生副作用。例如,是

class L { /* ... */ }; // indirect base class
class B1 : virtual public L { /* ... */ };
class D : public B1 { /* ... */ }; // valid

class L { /* ... */ }; // indirect base class
class B1 : public L { /* ... */ };
class D : public B1 { /* ... */ }; // valid

??我的意思是,在所有可能的情况下,将父类虚拟化是安全的吗?

将父类虚拟化“以防万一”也是安全的。标准没有规定如何实现虚拟继承,但可能会对性能造成轻微影响。除非你写的是对性能至关重要的东西,否则你不必担心它。

类需要使用一个或多个虚拟指针进行扩展,对象中的简单属性查找现在需要通过虚拟表进行两个间接操作

与虚拟函数不同