Union 是C/C++語言中的一種結構類型,用於定義可共享內存的數據變量的一種方式,初次使用Union聯合體時可能會遇到以下問題:
錯誤 C2280 Union : 嘗試引用已刪除的函數
警告 C4624 “Grade”: 已將析構函數隱式定義為“已刪除”
不多說,上代碼:
1 // TemplateExe1.cpp : 定義控制台應用程序的入口點。 2 // 3 4 #include "stdafx.h" 5 #include <iostream> 6 #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類時要盡量避免成員變量是對象(含有自己的構造函數)。