版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、C類(lèi)對(duì)象的復(fù)制-拷貝構(gòu)造函數(shù)類(lèi)對(duì)象的復(fù)制-拷貝構(gòu)造函數(shù)出處:PConline2005年03月09日作者:管寧責(zé)任編輯:xietaoming文章導(dǎo)讀:如果一個(gè)類(lèi)擁有資源(堆,或者是其它系統(tǒng)資源),當(dāng)這個(gè)類(lèi)的對(duì)象發(fā)生復(fù)制過(guò)程的時(shí)候,這個(gè)過(guò)程就可以叫做深拷貝,反之對(duì)象存在資源但復(fù)制過(guò)程并未復(fù)制資源的情況視為淺拷貝。在學(xué)習(xí)這一章內(nèi)容前我們已經(jīng)學(xué)習(xí)過(guò)了類(lèi)的構(gòu)造函數(shù)和析構(gòu)函數(shù)的相關(guān)知識(shí),對(duì)于普通類(lèi)型的對(duì)象來(lái)說(shuō),他們之間的復(fù)制是很簡(jiǎn)單的,例如:int
2、a=10intb=a自己定義的類(lèi)的對(duì)象同樣是對(duì)象,誰(shuí)也不能阻止我們用以下的方式進(jìn)行復(fù)制例如:#includeusingnamespacestdclassTestpublic:Test(inttemp)p1=tempprotected:intp1voidmain()Testa(99)Testb=a普通對(duì)象和類(lèi)對(duì)象同為對(duì)象,他們之間的特性有相似之處也有不同之處,類(lèi)對(duì)象內(nèi)部存在成員變量,而普通對(duì)象是沒(méi)有的,當(dāng)同樣的復(fù)制方法發(fā)生在不同的對(duì)象上的
3、時(shí)候,那么系統(tǒng)對(duì)他們進(jìn)行的操作也是不一樣的,就類(lèi)對(duì)象而言,相同類(lèi)型的類(lèi)對(duì)象是通過(guò)拷貝構(gòu)造函數(shù)來(lái)完成整個(gè)復(fù)制過(guò)程的,在上面的代碼中我們并沒(méi)有看到拷貝構(gòu)造函數(shù),同樣完成了復(fù)制工作,這又是為什么呢?因?yàn)楫?dāng)一個(gè)類(lèi)沒(méi)有自定義的拷貝構(gòu)造函數(shù)的時(shí)候系統(tǒng)會(huì)自動(dòng)提供一個(gè)默認(rèn)的拷貝構(gòu)造函數(shù),來(lái)完成復(fù)制工作。造函數(shù)來(lái)處理復(fù)制,那么我們沒(méi)有意義要去自定義拷貝構(gòu)造函數(shù)呀,對(duì),就普通情況而言這的確是沒(méi)有必要的,但在某些狀況下,類(lèi)體內(nèi)的成員是需要開(kāi)辟動(dòng)態(tài)開(kāi)辟堆內(nèi)存的
4、如果我們不自定義拷貝構(gòu)造函數(shù)而讓系統(tǒng)自己處理,那么就會(huì)導(dǎo)致堆內(nèi)存的所屬權(quán)產(chǎn)生混亂,試想一下,已經(jīng)開(kāi)辟的一端堆地址原來(lái)是屬于對(duì)象a的,由于復(fù)制過(guò)程發(fā)生,b對(duì)象取得是a已經(jīng)開(kāi)辟的堆地址,一旦程序產(chǎn)生析構(gòu),釋放堆的時(shí)候,計(jì)算機(jī)是不可能清楚這段地址是真正屬于誰(shuí)的,當(dāng)連續(xù)發(fā)生兩次析構(gòu)的時(shí)候就出現(xiàn)了運(yùn)行錯(cuò)誤。為了更詳細(xì)的說(shuō)明問(wèn)題,請(qǐng)看如下的代碼。#includeusingnamespacestdclassInterpublic:Inter(name
5、address)cout“載入構(gòu)造函數(shù)“endlstrcpy(Inter::namename)strcpy(Inter::addressaddress)cname=new[strlen(name)1]if(cname!=NULL)strcpy(Inter::cnamename)Inter(Interstrcpy(Inter::nametemp.name)strcpy(Inter::addresstemp.address)cname=ne
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- c++面向?qū)ο?oop)
- c++學(xué)習(xí)筆記(13)——利用對(duì)象、引用、指針調(diào)用虛函數(shù)
- c++課程設(shè)計(jì)-- c++面向?qū)ο蟪绦蛟O(shè)計(jì)
- 面向?qū)ο骳++習(xí)題參考解答
- c++面向?qū)ο髮?shí)例題集錦
- c++函數(shù)庫(kù)大全
- 深度探索c++對(duì)象模型(7)
- c++面向?qū)ο蟪绦蛟O(shè)計(jì)
- 面向?qū)ο蟪绦蛟O(shè)計(jì)與c++
- 面向?qū)ο蟪绦蛟O(shè)計(jì)題庫(kù)(c++)
- c++面向?qū)ο笳n程設(shè)計(jì)報(bào)告
- c++面向?qū)ο笞钥荚囶}
- c++數(shù)組數(shù)據(jù)處理對(duì)象實(shí)驗(yàn)
- c++成員函數(shù)重載,覆蓋與隱藏
- c++面向?qū)ο蠛?jiǎn)易圖形編輯器
- 面向?qū)ο蟪绦蚣夹g(shù)(c++)教學(xué)大綱
- c++類(lèi)的動(dòng)態(tài)組件化技術(shù)
- c++ bitset類(lèi)的使用及簡(jiǎn)介
- c++課程設(shè)計(jì)——矩陣類(lèi)
評(píng)論
0/150
提交評(píng)論