Union 是C/C++语言中的一种结构类型,用于定义可共享内存的数据变量的一种方式,初次使用Union联合体时可能会遇到以下问题:
错误 C2280 Union : 尝试引用已删除的函数
警告 C4624 “Grade”: 已将析构函数隐式定义为“已删除”
不多说,上代码:
1 // TemplateExe1.cpp : 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h" 5 #include6 #include "atlstr.h" 7 using namespace std; 8 union Grade { 9 int number;10 CString mark;11 bool pass;12 13 }uGrade;14 int main()15 {16 uGrade.number = 90;17 printf("%d",uGrade.number);18 getchar();19 20 return 0;21 }
此错误的原因:CString 是一个类,有自己的构造函数,析构函数。
解决方案:CString 换成基本的数据类型:char 等
我们分析一下:
Union的一大特征在于,一个Union类中的所有数据共享同一段内存。如果union类的成员包含自己的构造函数,析构函数,那么同一Union类的成员在初始化时,就有可能会执行不同的构造函数。这是无法预料的。所以,我们在定义Union类时要尽量避免成员变量是对象(含有自己的构造函数)。