c++对象长度之空类(1)
在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)相关推荐
- JPA 一对一设置无效,连表查询的时候另外一个实体类的对象值为空
文章目录 1.前言 2.错误示例: 3.正确示例 4.讲解 1.前言 今天在使用 JPA 的时候发现了这样一个问题,User 表和 OrganInfo 表配置了一对一关系,连表查询的时候只能够查到表 ...
- Lession11 集合和泛型(ArrayList方法、Arraylist类、ArrayList添加对象、ArrayList长度、HashTable类、Hashtable类练习-----)
目录 ArrayList方法: ArrayList添加对象: Arraylist类: ArrayList长度: HashTable类: Hashtable类练习: IComparable泛型接口排序: ...
- 判断对象是否为空工具类
项目中判断一个对象是否为空的操作必不可少的,可千万别傻乎乎的用==null去判断.目前官方没有给出这样的工具类,只能自己去实现了,代码如下:直接拿去用即可 package com.hisense.io ...
- java 判断对象是否为空的工具类_如何判断java对象是否为空
首先来看一下工具StringUtils的判断方法: 一种是org.apache.commons.lang3包下的:另一种是org.springframework.util包下的.这两种StringUt ...
- 【C++从入门到踹门】第三篇:类和对象(中)类的默认成员函数
目录 1.类的默认成员函数 2.构造函数 2.1 构造函数引入 2.2 构造函数概念及特点 3. 析构函数 3.1 析构函数引入 3.2 析构函数的概念 3.3 在哪些情况下会程序会执行析构函数? 3 ...
- vue 对象判断为空_Vue中可用的判断对象是否为空的方法
vue有两个方法可用 1. JSON.stringify(evtValue)=='{}' 2. Object.keys(xxx).length==0 js判断对象是否为空对象的几种方法 1.将json ...
- java判断一个对象是否为空_Java中判断对象是否为空的方法的详解
首先来看一下工具StringUtils的判断方法: 一种是org.apache.commons.lang3包下的: 另一种是org.springframework.util包下的.这两种StringU ...
- Java中判断String对象是否为空的方法
Java原生的方法: String对象中有一个isEmpty的方法判断是否为空,其实isEmpty完全等同于string.length()==0,注意如果String本身是null,那么使用strin ...
- C++中的空类,编译器默认可以产生哪些成员函数
C++中创建一个空类: class Empty {}; 默认会生成4个函数,其函数的原型如下: public: Empty() { ... } Empty(const Empty& rhs) ...
最新文章
- 全网唯一一个可以复现成功的光流计算项目
- php nfs,NFS(网络文件系统)服务器简单解析
- hdu 3706 Second My Problem First 单调队列
- 使用SQLServer2005插入一条数据时返回当前插入数据的ID
- echarts 柱状图 ,颜色和显示设置
- 「1s」即可!用 VS Code 一键玩转 GitHub 代码!
- 《第三方JavaScript编程》——1.4 第三方开发的挑战
- VMware安装Ubuntu配置NAT模式下静态IP,解决访问外网问题
- 8位串行加法器 计算机组成原理,安尧-2013434158-计算机组成原理8位加法器实验报告.doc...
- jclasslib插件_JClassLib
- PHP从入门到精通学习路线图
- vue echarts饼状图内部显示百分比
- Unirech腾讯云代充-关于腾讯云国际版云服务器实例调整配置常见问题
- 概率论3——古典概型与二项分布
- 鸿蒙系统报名选择一个应用,申请鸿蒙系统有一个应用选择怎么选择呢
- rfid射频前端的主要组成部分有_超高频RFID电子标签的组成
- 北京大学可视化发展前沿研究生暑期学校Day4
- 用Excel理解神经网络
- Python技术交流群(持续更新……)
- Nesterov加速算法
热门文章
- Cloud Computing:云网端融合的简介、层次、典型代表、未来趋势之详细攻略
- 成功解决TabError: inconsistent use of tabs and spaces in indentation
- Py之face_alignment:face_alignment库的简介、安装、使用方法之详细攻略
- PyQt:成功解决PyQt4升级到PyQt5改变的函数或方法
- MDK_main()代码执行过程分析
- PKG_CONFIG_PATH 、LD_LIBRARY_PATH、PATH三个的作用
- [POI2007]ZAP-Queries [HAOI2011]Problem b 莫比乌斯反演
- 问题 B: C语言11.2
- Html5元素及基本语法
- 页面状态javascript 判断 iframe是否加载成功