類繼承中構(gòu)造函數(shù)和析構(gòu)函數(shù)的調(diào)用

類繼承中構(gòu)造函數(shù)和析構(gòu)函數(shù)的調(diào)用

ID:1166900

大小:34.50 KB

頁(yè)數(shù):7頁(yè)

時(shí)間:2017-11-08

類繼承中構(gòu)造函數(shù)和析構(gòu)函數(shù)的調(diào)用_第1頁(yè)
類繼承中構(gòu)造函數(shù)和析構(gòu)函數(shù)的調(diào)用_第2頁(yè)
類繼承中構(gòu)造函數(shù)和析構(gòu)函數(shù)的調(diào)用_第3頁(yè)
類繼承中構(gòu)造函數(shù)和析構(gòu)函數(shù)的調(diào)用_第4頁(yè)
類繼承中構(gòu)造函數(shù)和析構(gòu)函數(shù)的調(diào)用_第5頁(yè)
資源描述:

《類繼承中構(gòu)造函數(shù)和析構(gòu)函數(shù)的調(diào)用》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫(kù)。

1、類繼承中構(gòu)造函數(shù)和析構(gòu)函數(shù)的調(diào)用作者:???來(lái)源:CSDN???點(diǎn)擊:119???日期:2007-4-2616:45:44???類繼承中構(gòu)造函數(shù)和析構(gòu)函數(shù)的調(diào)用現(xiàn)在,有三個(gè)類,類的定義如下classCA{public:?CA(){cout<<"CAconstructor"<

2、CBdesstructor"<

3、uctorCCconstructorCCdesstructorCBdesstructorCAdesstructor靠,太簡(jiǎn)單了,一個(gè)雞蛋飛過(guò)來(lái)了,:(繼續(xù)……………………(2)再做第二個(gè)試驗(yàn)之前,先做一點(diǎn)小小修改~CA(){cout<<"CAdesstructor"<>>virtual?~CA(){cout<<"CAdesstructor"<

4、哦CAconstructorCBconstructorCCconstructorCCdesstructorCBdesstructorCAdesstructor但是如果把virtual?~CA(){cout<<"CAdesstructor"<

5、,這將導(dǎo)致資源泄漏所以我們?cè)谠O(shè)計(jì)一個(gè)類的時(shí)候,如果類至少擁有一個(gè)虛函數(shù),或者說(shuō)基類被設(shè)計(jì)用于多態(tài),在這種情況下,一個(gè)派生類的對(duì)象可能通過(guò)一個(gè)基類指針來(lái)進(jìn)行操作,然后進(jìn)行銷毀,如果這樣的話,那么這個(gè)基類的析構(gòu)函數(shù)要設(shè)置成虛擬的,有些類雖然是基類,但是不是用于多態(tài)的,沒(méi)有虛函數(shù),沒(méi)有被設(shè)計(jì)成允許經(jīng)由基類接口派生類對(duì)象進(jìn)行操作,那么也無(wú)需設(shè)成虛析構(gòu)函數(shù),畢竟增加了開(kāi)銷,好了,解釋清楚了,我們也知道怎么做了,繼續(xù)試驗(yàn)(3)保留CA中的虛析構(gòu)函數(shù)修改main代碼如下intmain(){??CB*p=newCC();??de

6、letep;??return0;}運(yùn)行結(jié)果CAconstructorCBconstructorCCconstructorCCdesstructorCBdesstructorCAdesstructor取消CA中的虛析構(gòu)函數(shù),那么,CA,CB,CC中沒(méi)有虛析構(gòu)函數(shù)那么3中代碼運(yùn)行結(jié)果如下CAconstructorCBconstructorCCconstructorCBdesstructorCAdesstructor只調(diào)到CB的析構(gòu)哦,繼續(xù)試驗(yàn),CA,CB,CC中,只有CB是虛析構(gòu)函數(shù)3中代碼運(yùn)行如下CAconstru

7、ctorCBconstructorCCconstructorCCdesstructorCBdesstructorCAdesstructor所以,如果是CB指向派生類,只要CB或者其基類中存在虛析構(gòu)函數(shù),那么也是所有的析構(gòu)函數(shù)都調(diào)用的了繼續(xù)………………(4)修改main代碼如下intmain(){??CA*p=newCC();??deletep;??return0;}如果A的析構(gòu)函數(shù)是虛的,那么情況如2,不多說(shuō)了如果是CA的析構(gòu)函數(shù)不是虛的,而CB或者CC的析構(gòu)函數(shù)是虛擬的,那么在調(diào)用deletep;會(huì)出現(xiàn)內(nèi)存錯(cuò)誤

8、Expression:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)??是在釋放內(nèi)存的時(shí)候出現(xiàn)這樣的錯(cuò)誤上網(wǎng)查了一下,_BLOCK_TYPE_IS_VALID是用來(lái)檢測(cè)內(nèi)存有效性宏中的一個(gè),這個(gè)錯(cuò)誤說(shuō)明指針使用出現(xiàn)了問(wèn)題后來(lái)想了一想,應(yīng)該是因?yàn)槔^承類中出現(xiàn)了虛函數(shù),所以多了一個(gè)指向虛函數(shù)表的指針,而基類中一個(gè)虛函數(shù)都沒(méi)有,所以也沒(méi)有這個(gè)指針啦

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫(huà)的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。