在c++中一个空类占用的字节数

结论:  在c++中一个空类占用:1Byte。

有的同学认为一个空类占0Byte,那么定义一个空类时,他存放到哪里呢?为此,在c++编译器中,为空类设置了占用1Byte内存。

#include <iostream>   // std::cout

class Base {

};

class Point {
private:
    int circle;
};

int main () {
  Base b;
  Point p;
  
  std::cout << "sizeof(b)=" << sizeof(b) << std::endl;
  std::cout << "sizeof(p)=" << sizeof(p) << std::endl;
  return 0;
}

结果:

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一个class类对象在C++占用的内存大小取决于该类的成员变量和成员函数。以下是一些示例: 1. 没有成员变量和成员函数的类,大小为1字节(确保对象在内存占用的大小不为0,因为C++标准规定对象的大小不能为0)。 ```cpp class EmptyClass {}; std::cout << sizeof(EmptyClass) << std::endl; // 输出1 ``` 2. 只有一个成员变量的类,大小等于该成员变量的大小。 ```cpp class OneMemberClass { public: int member; }; std::cout << sizeof(OneMemberClass) << std::endl; // 输出4(在32位系统上) ``` 3. 多个成员变量的类,大小等于所有成员变量大小的总和,可能会受到内存对齐的影响。 ```cpp class MultiMemberClass { public: int member1; char member2; double member3; }; std::cout << sizeof(MultiMemberClass) << std::endl; // 输出24(在64位系统上) ``` 4. 包含虚函数的类,大小等于所有成员变量大小的总和加上一个指向虚函数表的指针的大小(通常为4或8字节)。 ```cpp class VirtualClass { public: virtual void func() {} int member; }; std::cout << sizeof(VirtualClass) << std::endl; // 输出16(在64位系统上) ``` 5. 继承自其他类的派生类,大小等于基类的大小加上该类特有的成员变量大小,可能会受到内存对齐的影响。 ```cpp class BaseClass { public: int member1; }; class DerivedClass : public BaseClass { public: char member2; }; std::cout << sizeof(DerivedClass) << std::endl; // 输出8(在32位系统上) ``` 6. 继承自多个基类的派生类,大小等于所有基类大小的总和加上该类特有的成员变量大小,可能会受到内存对齐的影响。 ```cpp class Base1 { public: int member1; }; class Base2 { public: char member2; }; class DerivedClass : public Base1, public Base2 { public: double member3; }; std::cout << sizeof(DerivedClass) << std::endl; // 输出24(在64位系统上) ``` 7. 包含静态成员变量的类,静态成员变量不计入对象的大小。 ```cpp class StaticClass { public: static int member; int member2; }; std::cout << sizeof(StaticClass) << std::endl; // 输出4(在32位系统上) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值