class A
{
public:
int i;
int j;
static int s;
virtual void Say(){};
int geti(){return i;};
int f(){cout<<"wahaha"<
#define L 4
};
32位系统,sizeof(A)=12,即sizeof(i) + sizeof(j) + sizeof(vptr)
注意:
1、static int s不占用类的空间,他存储在全局数据区
2、因为有了virtual函数,所以有一个vptr,否则没有
3、define不占用空间,编译时进行替换
4、成员函数不占类的空间,而是放在代码区,无论是否实例化都存在,而成员变量(非static)只有实例化时才分配空间(在stack或heap上)
所以考虑下面的代码:
A *a = NULL;
a->f(); //ok,因为成员函数一直存在,不依赖于实例化
a->geti();//segment fault,虽然函数代码存在,但未实例化不能访问成员变量(不存在)
阅读(875) | 评论(0) | 转发(0) |