|
今天试了一下虚继承 ,按说使用了虚继承 那么只会保存一份副本, 假如不使用虚继承 ,会保存几份最开始的基类的副本 ,而且容易产生二义性 , 那么按道理讲 虚继承的size应该小于不使用的情况 ,但是用代码测试了下是相反的.不知有人研究过这个问题么~
#include <iostream>
//此处使用这个宏来确定是否使用虚继承
#define test
using std::cout;
using std::endl;
class base
{
public:
base():a(1){cout<<"base"<<endl;}
~base(){cout<<"~base"<<endl;}
int a;
};
#ifdef test
class child1:virtual public base
#else
class child1:public base
#endif
{
public:
child1():b(2){cout<<"child1"<<endl;}
~child1(){cout<<"~child1"<<endl;}
int b;
};
#ifdef test
class child2:virtual public base
#else
class child2:public base
#endif
{
public:
child2():c(4){cout<<"child2"<<endl;}
~child2(){cout<<"~child2"<<endl;}
int c;
};
#ifdef test
class child3:virtual public base
#else
class child3:public base
#endif
{
public:
child3():d(5){cout<<"child3"<<endl;}
~child3(){cout<<"~child3"<<endl;}
int d;
};
class grand:public child1,public child2,public child3
{
public:
grand(){cout<<"grand"<<endl;}
~grand(){cout<<"~grand"<<endl;}
};
void main()
{
cout<<sizeof grand<<endl;
}
我得到的结果是使用虚继承 grand 的size为28 不使用为24...vs05
另外不知这种钻石型继承 <看到别的地方是这么叫的> 是提倡使用还是尽量避免使用? 望各位授业解惑~~ |
|