zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    P6007 [USACO20JAN]Springboards G
    CF1000F One Occurrence
    P6100 [USACO19FEB]Painting the Barn G
    P5838 [USACO19DEC]Milk Visits G
    P4085 [USACO17DEC]Haybale Feast
    P4267 [USACO18FEB]Taming the Herd
    P1712 [NOI2016]区间
    CF786B Legacy
    P5665 划分
    NOI2020网上同步赛 游记
  • 原文地址:https://www.cnblogs.com/xuelei/p/7528062.html
Copyright © 2011-2022 走看看