为什么类的大小及其对象总是相同的

时间:2014-04-23 19:48:47

标签: c++

我创建了一个虚拟析构函数,它为基类创建一个虚拟表。我可以通过虚拟指针为对象创建额外的大小,但不知道为什么类的大小也会增加。

创建虚拟表是否会对基类的大小产生影响?

请检查

#include<iostream>
using namespace std;
class xxx{
        int  x;
        char j;
public:
 virtual ~xxx()
 {
   cout<<"destructor"<<endll    
 }
};

int main(int argc, char *argv[])
{
  xxx x1;
  cout<<"sizeof class="<<sizeof(xxx)<<endl;

  cout<<"size of object="<<sizeof(x1)<<endl;
  return 0;
}

2 个答案:

答案 0 :(得分:4)

sizeof运算符调用有两种形式:

sizeof( type )      
sizeof expression

前者返回 type 实例的大小,而后者返回一个对象的大小,该类型将由expression返回。特别是,对于x1类型的对象xxxsizeof(xxx)sizeof x1必须返回相同的值。所以,你不是在比较“对象大小”和“班级大小”。

在C ++中,没有“类大小”的概念。您可以尝试通过添加vtable大小和静态成员大小的总和来估计它,但语言本身并没有提供任何方便的工具。

答案 1 :(得分:0)

类的大小增加是因为(在大多数现代编译器上 - 总是要添加免责声明以平息纯粹主义者),结构现在包含指向前面的一系列vtable的指针。

vtable指针随对象一起被携带。