在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语言中,空结构体是不占空间的

c++对象长度之空类(1)相关推荐

  1. JPA 一对一设置无效,连表查询的时候另外一个实体类的对象值为空

    文章目录 1.前言 2.错误示例: 3.正确示例 4.讲解 1.前言 今天在使用 JPA 的时候发现了这样一个问题,User 表和 OrganInfo 表配置了一对一关系,连表查询的时候只能够查到表 ...

  2. Lession11 集合和泛型(ArrayList方法、Arraylist类、ArrayList添加对象、ArrayList长度、HashTable类、Hashtable类练习-----)

    目录 ArrayList方法: ArrayList添加对象: Arraylist类: ArrayList长度: HashTable类: Hashtable类练习: IComparable泛型接口排序: ...

  3. 判断对象是否为空工具类

    项目中判断一个对象是否为空的操作必不可少的,可千万别傻乎乎的用==null去判断.目前官方没有给出这样的工具类,只能自己去实现了,代码如下:直接拿去用即可 package com.hisense.io ...

  4. java 判断对象是否为空的工具类_如何判断java对象是否为空

    首先来看一下工具StringUtils的判断方法: 一种是org.apache.commons.lang3包下的:另一种是org.springframework.util包下的.这两种StringUt ...

  5. 【C++从入门到踹门】第三篇:类和对象(中)类的默认成员函数

    目录 1.类的默认成员函数 2.构造函数 2.1 构造函数引入 2.2 构造函数概念及特点 3. 析构函数 3.1 析构函数引入 3.2 析构函数的概念 3.3 在哪些情况下会程序会执行析构函数? 3 ...

  6. vue 对象判断为空_Vue中可用的判断对象是否为空的方法

    vue有两个方法可用 1. JSON.stringify(evtValue)=='{}' 2. Object.keys(xxx).length==0 js判断对象是否为空对象的几种方法 1.将json ...

  7. java判断一个对象是否为空_Java中判断对象是否为空的方法的详解

    首先来看一下工具StringUtils的判断方法: 一种是org.apache.commons.lang3包下的: 另一种是org.springframework.util包下的.这两种StringU ...

  8. Java中判断String对象是否为空的方法

    Java原生的方法: String对象中有一个isEmpty的方法判断是否为空,其实isEmpty完全等同于string.length()==0,注意如果String本身是null,那么使用strin ...

  9. C++中的空类,编译器默认可以产生哪些成员函数

    C++中创建一个空类: class Empty {}; 默认会生成4个函数,其函数的原型如下: public: Empty() { ... } Empty(const Empty& rhs) ...

最新文章

  1. 全网唯一一个可以复现成功的光流计算项目
  2. php nfs,NFS(网络文件系统)服务器简单解析
  3. hdu 3706 Second My Problem First 单调队列
  4. 使用SQLServer2005插入一条数据时返回当前插入数据的ID
  5. echarts 柱状图 ,颜色和显示设置
  6. 「1s」即可!用 VS Code 一键玩转 GitHub 代码!
  7. 《第三方JavaScript编程》——1.4 第三方开发的挑战
  8. VMware安装Ubuntu配置NAT模式下静态IP,解决访问外网问题
  9. 8位串行加法器 计算机组成原理,安尧-2013434158-计算机组成原理8位加法器实验报告.doc...
  10. jclasslib插件_JClassLib
  11. PHP从入门到精通学习路线图
  12. vue echarts饼状图内部显示百分比
  13. Unirech腾讯云代充-关于腾讯云国际版云服务器实例调整配置常见问题
  14. 概率论3——古典概型与二项分布
  15. 鸿蒙系统报名选择一个应用,申请鸿蒙系统有一个应用选择怎么选择呢
  16. rfid射频前端的主要组成部分有_超高频RFID电子标签的组成
  17. 北京大学可视化发展前沿研究生暑期学校Day4
  18. 用Excel理解神经网络
  19. Python技术交流群(持续更新……)
  20. Nesterov加速算法

热门文章

  1. Cloud Computing:云网端融合的简介、层次、典型代表、未来趋势之详细攻略
  2. 成功解决TabError: inconsistent use of tabs and spaces in indentation
  3. Py之face_alignment:face_alignment库的简介、安装、使用方法之详细攻略
  4. PyQt:成功解决PyQt4升级到PyQt5改变的函数或方法
  5. MDK_main()代码执行过程分析
  6. PKG_CONFIG_PATH 、LD_LIBRARY_PATH、PATH三个的作用
  7. [POI2007]ZAP-Queries [HAOI2011]Problem b 莫比乌斯反演
  8. 问题 B: C语言11.2
  9. Html5元素及基本语法
  10. 页面状态javascript 判断 iframe是否加载成功