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

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

ID:1166900

大?。?4.50 KB

頁數(shù):7頁

時間:2017-11-08

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

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

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

2、CBdesstructor"<

3、uctorCCconstructorCCdesstructorCBdesstructorCAdesstructor靠,太簡單了,一個雞蛋飛過來了,:(繼續(xù)……………………(2)再做第二個試驗之前,先做一點小小修改~CA(){cout<<"CAdesstructor"<>>virtual?~CA(){cout<<"CAdesstructor"<

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

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

6、letep;??return0;}運行結(jié)果CAconstructorCBconstructorCCconstructorCCdesstructorCBdesstructorCAdesstructor取消CA中的虛析構(gòu)函數(shù),那么,CA,CB,CC中沒有虛析構(gòu)函數(shù)那么3中代碼運行結(jié)果如下CAconstructorCBconstructorCCconstructorCBdesstructorCAdesstructor只調(diào)到CB的析構(gòu)哦,繼續(xù)試驗,CA,CB,CC中,只有CB是虛析構(gòu)函數(shù)3中代碼運行如下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,不多說了如果是CA的析構(gòu)函數(shù)不是虛的,而CB或者CC的析構(gòu)函數(shù)是虛擬的,那么在調(diào)用deletep;會出現(xiàn)內(nèi)存錯誤

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

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

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

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