zoukankan      html  css  js  c++  java
  • class的大小

    3个问题:

    sizeof一个空类是多大?为什么?编译器为什么这么做?

    在这个类中添加一个virtual函数后再sizeof,这时是多大?为什么?

    将这个类再virtual继承一个其它的空类,这是多大?为什么?

    class A
    {
    };
    
    class B
    {
        virtual void print()
        {
            cout << "B" << endl;
        }
    };
    
    
    class C : public A
    {
        virtual void print()
        {
            cout << "C" << endl;
        }
    };
    
    int main()
    {
        cout << sizeof(A) << endl;
        cout << sizeof(B) << endl;
        cout << sizeof(C) << endl;
    
        return 0;
    }

    结论:

    1.对象是存在于内存中的实体,编译器必须为其分配内存空间(C++编译器还为每个类默认生成了&取地址运算符函数)。所以如果是空类,编译器也会分配一个字节。

    2.如果在空类中加入一个virtual函数后,类对象的内存空间为vfptr(指向虚函数表的指针),不再需要插入一个字节。

    3.继承一个空类时,空类的“那一个字节”是不会存在派生类中的

  • 相关阅读:
    OD 实验(十三)
    第一个 Windows 界面程序
    C 语言
    C 语言
    OD 实验(十二)
    PowerShell 常用命令
    OD 实验(十一)
    OD 实验(十)
    redis
    memcached缓存系统
  • 原文地址:https://www.cnblogs.com/lakeone/p/5933631.html
Copyright © 2011-2022 走看看