C++对象模型(内存布局)

如果是一个空类,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

原文地址:https://www.cnblogs.com/xuelei/p/7528062.html