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