1.基本概念
Union是一种特殊的类,也是一种构造类型的数据结构。
在Union中,所有的共用体成员共用一个空间,并且同一时间只能储存其中一个成员变量的值。
2.与struct的区别
1.union和struct都是由多个不同的数据类型成员组成。
但在任何同一时刻,union只存放了一个被选中的成员,而struct的所有成员都存在。
2.对于union的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了。
而对于结构体的不同成员赋值是互不影响的。
3. 在struct中各成员有各自的内存空间, 一个结构变量的总长度是各成员长度之和。
而在union中,各成员共享一段内存空间, 一个联合变量的长度等于各成员中最长的长度。
3.使用类管理union成员
待续...
这是C++11的新特性,参考《C++ primer》5th中文版19.6节
4.SGI STL对union的使用
SGI SRL对alloc配置器的设计中使用到了union,第二级空间配置器使用union构建free-lists链表的节点。
union obj{
union obj* free_list_link;
char client_data[1]; /*The client sees this */
}
当客端释还一小块区块时,配置器回收到free-lists中,union看作一个指向下一个节点的指针。
当客户端使用区块时,union当作一个数据块。
alloc的第二级空间配置器_default_alloc_template中定义了一个私有成员,该成员包含16个指向obj的指针,用于维护16个free-lists,各自管理大小分别为8,16,...,128bytes的小额区块。
本文部分取自https://blog.csdn.net/veahlin/article/details/60144505