Union的問題解答
出處:3842 發(fā)布于:2008-09-12 08:57:35
我們知道,聯(lián)合里面的東西共享內(nèi)存,所以靜態(tài)、引用都不能用,因?yàn)樗麄儾豢赡芄蚕韮?nèi)存。
2、類可以放入聯(lián)合嗎?
我們先看一個(gè)例子:
class Test
{
public:
test():data(0) { }
private:
int data;
};
typedef union _test
{
Test test;
}UI;
編譯通不過,為什么呢?
因?yàn)槁?lián)合里不允許存放帶有構(gòu)造函數(shù)、析夠函數(shù)、復(fù)制拷貝操作符等的類,因?yàn)樗麄児蚕韮?nèi)存,編譯器無法保證這些對象不被破壞,也無法保證離開時(shí)調(diào)用析夠函數(shù)。
3、又是匿名惹的禍??
我們先看下一段代碼:
class test
{
public:
test(const char* p);
test(int in);
const operator char*() const {return data.ch;}
operator long() const {return data.l;}
private:
enum type {Int, String };
union
{
const char* ch;
int i;
}datatype;
type stype;
test(test&);
test& operator=(const test&);
};
test::test(const char *p):stype(String),datatype.ch(p) { }
test::test(int in):stype(Int),datatype.l(i) { }
看出什么問題了嗎?呵呵,編譯通不過。為什么呢?難道datatype.ch(p)和datatype.l(i)有問題嗎?
在構(gòu)造函數(shù)中當(dāng)然要調(diào)用其成員的構(gòu)造函數(shù),所以其要去調(diào)用datatype成員的構(gòu)造函數(shù),但是他沒有構(gòu)造函數(shù)可調(diào)用,所以出錯(cuò)。
注意了,這里可并不是匿名聯(lián)合!因?yàn)樗竺婢o跟了個(gè)data!
4、如何有效的防止訪問出錯(cuò)?
使用聯(lián)合可以節(jié)省內(nèi)存空間,但是也有一定的風(fēng)險(xiǎn):通過一個(gè)不適當(dāng)?shù)臄?shù)據(jù)成員獲取當(dāng)前對象的值!例如上面的ch、i交錯(cuò)訪問。
為了防止這樣的錯(cuò)誤,我們必須定義一個(gè)額外的對象,來跟蹤當(dāng)前被存儲(chǔ)在聯(lián)合中的值得類型,我們稱這個(gè)額外的對象為:union的判別式。
一個(gè)比較好的經(jīng)驗(yàn)是,在處理作為類成員的union對象時(shí),為所有union數(shù)據(jù)類型提供一組訪問函數(shù)。
上一篇:介紹Union的定義
版權(quán)與免責(zé)聲明
凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://m.58mhw.cn,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。
如涉及作品內(nèi)容、版權(quán)等問題,請?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
- 工業(yè)5G技術(shù)在智能制造中的應(yīng)用與實(shí)踐解析2025/12/31 10:57:21
- 工業(yè)以太網(wǎng)交換機(jī)選型與現(xiàn)場應(yīng)用技術(shù)指南2025/12/18 10:48:14
- 無線傳輸電路基礎(chǔ),射頻前端設(shè)計(jì)、天線匹配與鏈路預(yù)算計(jì)算2025/10/27 13:55:50
- ASK 解調(diào)的核心要點(diǎn)與實(shí)現(xiàn)方式2025/9/5 16:46:17
- 雙偶極子天線:結(jié)構(gòu)、特性與應(yīng)用全解析2025/9/3 10:29:21









