class B
{
public:
B(int i){}
};
class D1:public virtual B
{
public:
D1(void):B(1){}
};
class D2:public virtual B
{
public:
D2(void):B(1){}
};
class C:public virtual D1,public virtual D2
{
public:
C(void){}
};
{
public:
B(int i){}
};
class D1:public virtual B
{
public:
D1(void):B(1){}
};
class D2:public virtual B
{
public:
D2(void):B(1){}
};
class C:public virtual D1,public virtual D2
{
public:
C(void){}
};
如果D1和D2都想要创建B,则B被创建2次,这是错误的,编译器会停止执行D1和D2对B的创建,这个任务交给C来做。比如:
public:
C(void):B(1){}
参考
http://www.cplusplus.com/forum/general/1414/

本文深入探讨了C++中通过多继承实现的虚拟基类的使用方式及其潜在陷阱,特别是当多个派生类共享同一个虚拟基类时,编译器如何智能地管理内存和构造函数调用,避免了不必要的重复初始化问题。
499

被折叠的 条评论
为什么被折叠?



