有关c++空类问题

C++中的空类在编译器处理后并非真正意义上的空。即使没有数据成员和函数,编译器也会为每个空类添加一个额外的字节以确保不同对象的地址不同。在继承的情况下,空类作为基类时,大小保持为1,除非涉及虚继承,这时会有虚基类索引占用空间。此外,空类还会隐式声明默认构造函数、拷贝构造函数、析构函数、赋值运算符和取址运算符等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

《 effective c++ 》

空类是没有数据成员,没有函数的类,例如 class Empty { };

1. 空类或者空类对象的大小(无继承情况下):编译器会在空类中安插一个char,使得这个空类的两个objects得以在内存中配置独一无二的地址。只有当一个类为空的时候,编译器才会向该类中加入这样一个char!

2. 空类或者空类对象的大小(有继承但无虚继承情况下):继承的基类都是空类,大小是1,不管有多少个父类。

3. 空类或者空类对象的大小(单一虚继承情况下):对每一个虚继承基类,都有一个虚基类索引(或者偏移量、指针),占4字节


定义一个空的C++类,例如

class Empty

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值