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

时间:2011-03-09 03:29:16

标签: c++ class virtual

Virtual Public 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

?我的意思是,对于所有可能的情况,将父类设为虚拟是否安全?

2 个答案:

答案 0 :(得分:7)

将父类虚拟化为“以防万一”同样安全。该标准没有规定如何实现虚拟继承,但可能会有轻微的性能损失。除非你写的是性能关键的东西,否则你不必担心它。

答案 1 :(得分:3)

http://www.phpcompiler.org/articles/virtualinheritance.html

  

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

与虚拟功能不同。