C++中虚拟表的虚拟指针(VPTR)的大小是多少?这也不是一个家庭作业问题......在我阅读C++书籍时,我想到了一个问题.
虚拟基类是一种防止使用多重继承时给定类的多个实例出现在继承层次结构中的方法。然后针对以下课程
class level0 {
int a;
public :
level0();
};
class level10:virtual public level0 {
int b;
public :
level10();
};
class level11 :virtual public level0 {
int c;
public :
level11();
};
class level2 :public level10,public level11 {
int d;
public:
level2();
};
Run Code Online (Sandbox Code Playgroud)
我得到了以下课程的大小
等级大小0 4
10级的大小12
11级的大小12
2级的大小24
但是当我从级别10和级别11的继承中删除虚拟时,得到以下输出
等级大小0 4
等级大小10 8
等级大小11 8
2级大小
如果虚拟继承阻止了一个基类的多个实例,那么为什么在虚拟继承的情况下类的大小更大?
class base
{
};
class der_1:public base
{
};
class der_2:virtual public base
{
};
int main()
{
der_1 a; //size of a is 1
der_2 b; //size of b is 4 ?? why
cout<<sizeof(a)<<endl;
cout<<sizeof(b)<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
对象b内部包含虚拟指针,因此其大小为4而不是1(如a).但是这个虚拟指针指向什么?