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

pro*_*eek 4 c++ virtual class

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
Run Code Online (Sandbox Code Playgroud)

当我们不使用虚拟公共来进行单一继承时,我们是否有副作用.例如,是

class L { /* ... */ }; // indirect base class
class B1 : virtual public L { /* ... */ };
class D : public B1 { /* ... */ }; // valid
Run Code Online (Sandbox Code Playgroud)

同样的

class L { /* ... */ }; // indirect base class
class B1 : public L { /* ... */ };
class D : public B1 { /* ... */ }; // valid
Run Code Online (Sandbox Code Playgroud)

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

use*_*751 7

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