zoukankan      html  css  js  c++  java
  • c++类大小问题

    1.空类

    class A
    {
    };
    
    sizeof(A); //1

    解析:类的实例化就是为每个实例在内存中分配一块地址;每个类在内存中都有唯一的标识,因此空类被实例化时,编译器会隐含地为其添加一个字节,以作区分。

    2.虚函数类

    class A
    {
        virtual void Fun();
    };
    
    sizeof(A); //4

    解析:当一个类中包含虚函数时,会有一个指向其虚函数表的指针vptr,系统为类指针分配大小为4个字节(即使有多个虚函数)。

    3.普通数据成员

    class A
    {
        int a;
        char b;
    };
    
    sizeof(A); //8

    解析:普通数据成员,按照其数据类型分配大小,由于字节对齐,所以a+b=8字节。

    4.静态数据成员

    class A
    {
        int a;
        static int b;
    };
    
    sizeof(A); //4

    解析:静态数据成员存放的是全局数据段,即使它是类的一个成员,但不影响类的大小;不管类产生多少实例或者派生多少子类,静态成员数据在类中永远只有一个实体存在。而类的非静态数据成员只有被实例化时,才存在,但类的静态数据成员一旦被声明,无论类是否被实例化,它都已存在,类的静态数据成员可以说是一种特殊的全局变量。

    5.普通成员函数

    class A
    {
        void Fun();
    };
    
    sizeof(A); //1

    解析:类的大小与它的构造函数、析构函数以及其他成员函数无关,只与它的数据成员相关。

    6.普通继承

    class A
    {
        int a;
    };
    
    class B:public A
    {
        int b;
    };
    
    sizeof(B); //8

    解析:普通类的继承,类的大小为本身数据成员大小+基类数据成员大小。

    7.虚函数继承

    virtual class A
    {
        int a;
    };
    
    class B:virtual public A
    {
        int b;
    };
    
    sizeof(B); //12

    解析:虚函数类的继承,派生类大小=派生类自身成员大小+基类数据成员大小+虚拟指针大小(即使继承多个虚基类,也只有一个指向其虚函数表的指针vptr,大小为4字节)。

  • 相关阅读:
    git init 后关联github仓库是发生错误:
    node mysql模块写入中文字符时的乱码问题
    Error: ER_BAD_FIELD_ERROR: Unknown column 'xxx' in 'where clause'
    安装MariaDB
    yum命令无效
    文档管理系统介绍
    RichTextBox文字处理控件属性介绍
    Android调用相册拍照控件实现系统控件缩放切割图片
    苹果5S指纹扫描识别传感器Touch ID有利于iPhone的安全性
    在服务器端将XML转换成HTML
  • 原文地址:https://www.cnblogs.com/sz-leez/p/7119232.html
Copyright © 2011-2022 走看看