c++:空类及其子类的占用空间问题

目录

1、空的struct/class占多大空间,为什么占这么多?

2、继承空类的子类占用多大空间?

3、继承空类的空子类占用多大空间呢?


1、空的struct/class占多大空间,为什么占这么多?

/*================================================================
*   Copyright (C) 2021 baichao All rights reserved.
*
*   文件名称:emptyClassSize.cpp
*   创 建 者:baichao
*   创建日期:2021年02月03日
*   描    述:
*
================================================================*/

#include <iostream>

struct base1{};
class base2{};

int main()
{
    std::cout<<"类base1的长度为:"<<sizeof(base1)<<std::endl;
    std::cout<<"结构体base2的长度为:"<<sizeof(base2)<<std::endl;
    return 0;
}

运行结果:

空类或者空结构体占1个字节,因为c++要求每个实例在内存中都有独一无二的地址。空类也会被实例化,所以编译器会给空类隐含的添加一个字节,这样空类实例化之后就有了独一无二的地址了。所以空类的sizeof为1。

2、继承空类的子类占用多大空间?

/*================================================================
*   Copyright (C) 2021 baichao All rights reserved.
*
*   文件名称:emptyClassSize.cpp
*   创 建 者:baichao
*   创建日期:2021年02月03日
*   描    述:
*
================================================================*/

#include <iostream>

struct base1{};
class base2{};

class rbase2:public base2
{
    int a;
};

int main()
{
    std::cout<<"结构体base1的长度为:"<<sizeof(base1)<<std::endl;
    std::cout<<"类base2的长度为:"<<sizeof(base2)<<std::endl;
    std::cout<<"类rbase2的长度为:"<<sizeof(rbase2)<<std::endl;
    return 0;
}

运行结果:

继承空类的子类所占空间仅不再包含空类单独存在时所占用的一个字节,因为子类已经有成员变量了。

3、继承空类的空子类占用多大空间呢?

/*================================================================
*   Copyright (C) 2021 baichao All rights reserved.
*
*   文件名称:emptyClassSize.cpp
*   创 建 者:baichao
*   创建日期:2021年02月03日
*   描    述:
*
================================================================*/

#include <iostream>

struct base1{};
class base2{};

class rbase2:public base2
{
    int a;
};

class rbase3:public base2
{
};
int main()
{
    std::cout<<"结构体base1的长度为:"<<sizeof(base1)<<std::endl;
    std::cout<<"类base2的长度为:"<<sizeof(base2)<<std::endl;
    std::cout<<"类rbase2的长度为:"<<sizeof(rbase2)<<std::endl;
    std::cout<<"空子类rbase3的长度为:"<<sizeof(rbase3)<<std::endl;
    return 0;
}

运行结果:

继承空类的空子类依然只有一个字节。 

猜你喜欢

转载自blog.csdn.net/weixin_40179091/article/details/113672976