相关疑难解决方法(0)

虚拟指针的大小-C++

C++中虚拟表的虚拟指针(VPTR)的大小是多少?这也不是一个家庭作业问题......在我阅读C++书籍时,我想到了一个问题.

c++ pointers vtable

5
推荐指数
1
解决办法
5521
查看次数

为什么在虚拟继承的情况下类的大小更大?

虚拟基类是一种防止使用多重继承时给定类的多个实例出现在继承层次结构中的方法。然后针对以下课程

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级大小

如果虚拟继承阻止了一个基类的多个实例,那么为什么在虚拟继承的情况下类的大小更大?

c++ virtual inheritance

4
推荐指数
1
解决办法
191
查看次数

虚拟继承中派生类对象的大小

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).但是这个虚拟指针指向什么?

c++

1
推荐指数
2
解决办法
296
查看次数

标签 统计

c++ ×3

inheritance ×1

pointers ×1

virtual ×1

vtable ×1