class base
{
public:
base(){};
~base(){};
virtual void f(int){};
void g2(){};
};class ba
{
public:};void main()
{
cout<<sizeof(base)<<endl;//输出为4,这个4是由什么量占去的,为什么?
cout<<sizeof(ba)<<endl;//输出为1,同由什么占去的,为什么?
}
{
public:
base(){};
~base(){};
virtual void f(int){};
void g2(){};
};class ba
{
public:};void main()
{
cout<<sizeof(base)<<endl;//输出为4,这个4是由什么量占去的,为什么?
cout<<sizeof(ba)<<endl;//输出为1,同由什么占去的,为什么?
}
2. 占位,The sizeof operator never yields 0, even for an empty class.
2. 按照Bjarne的说法,对于无数据成员和无虚函数的类,sizeof操作将返回1个字节,这是为了保证能建立类的实例以及参数传递的正确
};这样的类大小不会是0,具体多大,与编译器的实现有关。
类大小不为0,是有明确意义的,如:
ba test[10]; // 尽管ba里面是空的,但ba大小不能为零,否则ba的数组无意义
ba *p = new ba; // 此时ba大小也不能为零,否则会分配0大小的对象
class base
{
public:
base(){};
~base(){};
virtual void f(int){};
};这个类的大小为sizeof(void*),原因是包含虚函数指针。vptr与实现相关的。在VC里面,vptr位与类内存位置的最开始,所以它与this是相等的,但某些实现里面,vptr可能位于类的内存位置尾部,就与this不相等了。