如果是一个空类,sizeof(A) = 1
C++的成员包含:非static数据成员,static数据成员,非static成员函数,static成员函数,virtual成员函数。
如类
class Person { public: Person():m_id(0),m_age(20) { ++m_count; } virtual ~Person() { --m_count; } virtual void print() { cout << "id:" << m_id << "age:" << m_age << endl; } void work() { cout << "working" << endl; } static int personCount() { return m_count; } private: static int m_count; int m_id; int m_age; };
只有非static数据成员被放置于每一个类对象中(在内存中的存放顺序与声明顺序一致),非static数据成员和成员函数都被放置在类对象之外。
如果没有virtual成员函数 sizeof(Person) = 8
如果有virtual成员函数,虚指针被放在对象的第一个位置,后边排列数据成员。sizeof(Person) = 16,附:64位机器下指针类型长度是8
如果是单一继承关系:子类先放vptr;再放父类数据成员;最后放子类数据成员。
参考http://blog.csdn.net/ljianhui/article/details/45903939