C++联合体
来源:互联网 发布:java接收上传图片表单 编辑:程序博客网 时间:2024/06/05 14:35
利用union可以用相同的存储空间存储不同型别的数据类型,从而节省内存空间。当访问其内成员时可用"."和"->"来直接访问。
当多个数据需要共享内存或者多个数据每次只取其一时,可以利用联合体(union)。在C Programming Language 一书中对于联合体是这么描述的:1)联合体是一个结构;
2)它的所有成员相对于基地址的偏移量都为0;
3)此结构空间要大到足够容纳最"宽"的成员;
我们知道,联合里面的东西共享内存,所以静态、引用都不能用,因为他们不可能共享内存。类可以放入联合吗? 我们先看一个例子:
class Test
{
public:
Test():data(0) { }
private:
int data;
};
typedef union _test
{
Test test;
}UI;
{
public:
Test():data(0) { }
private:
int data;
};
typedef union _test
{
Test test;
}UI;
编译通不过,为什么呢?
因为联合里不允许存放带有构造函数、析够函数、复制拷贝操作符等的类,因为他们共享内存,编译器无法保证这些对象不被破坏,也无法保证离开时调用析够函数。
如何有效的防止访问出错?
使用联合可以节省内存空间,但是也有一定的风险:通过一个不适当的数据成员获取当前对象的值!例如上面的ch、i交错访问。
为了防止这样的错误,我们必须定义一个额外的对象,来跟踪当前被存储在联合中的值得类型,我们称这个额外的对象为:union的判别式。
一个比较好的经验是,在处理作为类成员的union对象时,为所有union数据类型提供一组访问函数。
阅读全文
0 0
- C语言联合体union
- C语言基础-联合体
- C语言联合体union
- c语言 union 联合体
- C语言联合体 union
- C/C++中的联合体
- C 联合体 union
- C经典 联合体union
- C的数据结构:联合体
- C语言中的联合体
- [C++]union联合体总结
- C笔记 联合体 枚举
- C语言中的联合体
- C语言中的联合体union
- C语言中的联合体union
- C语言中的联合体union
- C语言中的联合体union
- C语言中的联合体union
- c++中内存拷贝函数(C++ memcpy)详解
- 洛谷-摆花-动态规划
- 架构师之路(1)秒杀系统架构优化思路
- react学习日志3
- Python学习资料
- C++联合体
- HibernateDaoSupport详解
- [来源未知][小学奥数]组合数取模
- Node.js 2小时爬取驴妈妈8W+条旅游数据
- 提取深度网络某一层特征
- Nginx 与 阿帕奇 配合使用配置记录(实现 多个 tomcat 多个 php网站 共存)。
- Android studio Error converting LogicalPosition: (59, 0); leans forward to visual position
- 如何招聘一个优秀的Scrum Master(转载)
- html5_AngularJs简单使用2