33,311
社区成员
发帖
与我相关
我的任务
分享
#include "iostream"
using namespace std;
struct normal {
};
struct base {
virtual void fun() {
}
};
struct dev : public base {
};
struct vev : virtual public base {
};
int main()
{
cout<<sizeof(normal)<<endl;
cout<<sizeof(base)<<endl;
cout<<sizeof(dev)<<endl;
cout<<sizeof(vev)<<endl;
return 0;
}
结果是
1
4
4
8
对于空结构/类,为了寻址,其必须有大小,在win32上最小的单位是1BYTE,所以 是 1
你可以设想如果大小是0回出现的各种问题,比如
normal* p = new normal[100];
p++ 等于多少呢??
对于有序函数的class,由于需要存储虚表,所以需要4字节的vtable指针,对于不同的
编译器,vtable指针的位置不同,vc一般在类的数据最前面
对于虚继承,除了vtable还需要一个4字节的 virtual base class table
详细了解你可以看看这个
http://htm.winsteps.net/program/5724.htm