我创建了一个虚拟析构函数,它为基类创建一个虚拟表。我可以通过虚拟指针为对象创建额外的大小,但不知道为什么类的大小也会增加。
创建虚拟表是否会对基类的大小产生影响?
请检查
#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;
}
答案 0 :(得分:4)
sizeof
运算符调用有两种形式:
sizeof( type )
sizeof expression
前者返回 type 实例的大小,而后者返回一个对象的大小,该类型将由expression
返回。特别是,对于x1
类型的对象xxx
,sizeof(xxx)
和sizeof x1
必须返回相同的值。所以,你不是在比较“对象大小”和“班级大小”。
在C ++中,没有“类大小”的概念。您可以尝试通过添加vtable大小和静态成员大小的总和来估计它,但语言本身并没有提供任何方便的工具。
答案 1 :(得分:0)
类的大小增加是因为(在大多数现代编译器上 - 总是要添加免责声明以平息纯粹主义者),结构现在包含指向前面的一系列vtable的指针。
vtable指针随对象一起被携带。