
c++对象长度之空类(1)
发布日期:2021-05-07 12:06:34
浏览次数:17
分类:原创文章
本文共 638 字,大约阅读时间需要 2 分钟。
在c++中说起对象,大家是不是很熟悉?
对象嘛,new一个不就行了嘛,对吧?(这里不说malloc,malloc它不负责触发构造函数,它也不是运算符,没法重载)
但当我们提到对象大小的时候,大家对怎么计算呢?
是不是直接:
对象长度=sizeof(数据成员1)+sizeof(数据成员2)+sizeof(数据成员3)+sizeof(数据成员4)+…………sizeof(数据成员n)
是这样对嘛?
那我们用这个公式验证一下空对象的大小是不是应该为0呢?对吧?那我们来验证一下
从表面上看,这个公式是并没有任何问题的,但对象的大小远远没有那么简单哦。即使类中继承和虚函数的定义,仍有三种特殊情况能推翻此公式:
a.空类
b.内存对齐
c.静态数据成员
接下来请听我详细解释:
空类
空类中没有任何数据成员,按照该公式计算出的对象长度是0字节。类型长度为0,则此类的对象不占据内存空间。而实际情况是,空类的长度为1字节。如果对象完全不占据内存空间,那么空类就无法取得实例对象的地址,(每一个对象实例化都需要空间,这里系统默认给了一个占位符,占1字节大小)this指针失效,因此就不能实例化。而类的定义是由成员数据和成员函数组成,在没有成员数据的情况下,还可以有成员函数,因此仍然需要实例化,分配了1字节的空间用于类的实例化,这1字节的数据并没有被使用,当然这只是针对于c++中的类和结构体。
另外在c++中,一个空类和空结构体是占一个字节的空间的。但在c语言中,空结构体是不占空间的
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2025年04月05日 10时18分50秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
STM32boot启动
2019-03-05
回调函数(callback function)
2019-03-05
omnet++
2019-03-05
23种设计模式一:单例模式
2019-03-05
Qt中的析构函数
2019-03-05
CSharp中委托(一)委托、匿名函数、lambda表达式、多播委托、窗体传值、泛型委托
2019-03-05
二叉堆的c++模板类实现
2019-03-05
C语言实现dijkstra(adjacence matrix)
2019-03-05
用C#实现封装-徐新帅-专题视频课程
2019-03-05
C语言学习从初级到精通的疯狂实战教程-徐新帅-专题视频课程
2019-03-05
三层框架+sql server数据库 实战教学-徐新帅-专题视频课程
2019-03-05
NAT工作原理
2019-03-05
Processes, threads and goroutines
2019-03-05
c++中的10种常见继承
2019-03-05
E28 LoRa模块透传 定点传输 RSSI测试与MicroPython应用
2019-03-05
Vue学习—深入剖析渲染函数
2019-03-05
Vue学习—深入剖析函数式组件
2019-03-05
简单Makefile的编写
2019-03-05
使用BAT批处理 匹配查找指定文件夹,并在当文件夹下创建空文件
2019-03-05
wxpython的Hello,World代码探索
2019-03-05