国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

構(gòu)造函數(shù)不能聲明為虛函數(shù)的原因及分析

2020-01-26 15:46:19
字體:
供稿:網(wǎng)友

1. 從存儲(chǔ)空間角度,虛函數(shù)對(duì)應(yīng)一個(gè)指向vtable虛函數(shù)表的指針,這大家都知道,可是這個(gè)指向vtable的指針其實(shí)是存儲(chǔ)在對(duì)象的內(nèi)存空間的。問題出來了,如果構(gòu)造函數(shù)是虛的,就需要通過 vtable來調(diào)用,可是對(duì)象還沒有實(shí)例化,也就是內(nèi)存空間還沒有,怎么找vtable呢?所以構(gòu)造函數(shù)不能是虛函數(shù)。

2. 從使用角度,虛函數(shù)主要用于在信息不全的情況下,能使重載的函數(shù)得到對(duì)應(yīng)的調(diào)用。構(gòu)造函數(shù)本身就是要初始化實(shí)例,那使用虛函數(shù)也沒有實(shí)際意義呀。所以構(gòu)造函數(shù)沒有必要是虛函數(shù)。虛函數(shù)的作用在于通過父類的指針或者引用來調(diào)用它的時(shí)候能夠變成調(diào)用子類的那個(gè)成員函數(shù)。而構(gòu)造函數(shù)是在創(chuàng)建對(duì)象時(shí)自動(dòng)調(diào)用的,不可能通過父類的指針或者引用去調(diào)用,因此也就規(guī)定構(gòu)造函數(shù)不能是虛函數(shù)。

3. 構(gòu)造函數(shù)不需要是虛函數(shù),也不允許是虛函數(shù),因?yàn)閯?chuàng)建一個(gè)對(duì)象時(shí)我們總是要明確指定對(duì)象的類型,盡管我們可能通過實(shí)驗(yàn)室的基類的指針或引用去訪問它但析構(gòu)卻不一定,我們往往通過基類的指針來銷毀對(duì)象。這時(shí)候如果析構(gòu)函數(shù)不是虛函數(shù),就不能正確識(shí)別對(duì)象類型從而不能正確調(diào)用析構(gòu)函數(shù)。

4. 從實(shí)現(xiàn)上看,vbtl在構(gòu)造函數(shù)調(diào)用后才建立,因而構(gòu)造函數(shù)不可能成為虛函數(shù)從實(shí)際含義上看,在調(diào)用構(gòu)造函數(shù)時(shí)還不能確定對(duì)象的真實(shí)類型(因?yàn)樽宇悤?huì)調(diào)父類的構(gòu)造函數(shù));而且構(gòu)造函數(shù)的作用是提供初始化,在對(duì)象生命期只執(zhí)行一次,不是對(duì)象的動(dòng)態(tài)行為,也沒有必要成為虛函數(shù)。

5. 當(dāng)一個(gè)構(gòu)造函數(shù)被調(diào)用時(shí),它做的首要的事情之一是初始化它的VPTR。因此,它只能知道它是“當(dāng)前”類的,而完全忽視這個(gè)對(duì)象后面是否還有繼承者。當(dāng)編譯器為這個(gè)構(gòu)造函數(shù)產(chǎn)生代碼時(shí),它是為這個(gè)類的構(gòu)造函數(shù)產(chǎn)生代碼――既不是為基類,也不是為它的派生類(因?yàn)轭惒恢勒l繼承它)。所以它使用的VPTR必須是對(duì)于這個(gè)類的VTABLE。而且,只要它是最后的構(gòu)造函數(shù)調(diào)用,那么在這個(gè)對(duì)象的生命期內(nèi),VPTR將保持被初始化為指向這個(gè)VTABLE, 但如果接著還有一個(gè)更晚派生的構(gòu)造函數(shù)被調(diào)用,這個(gè)構(gòu)造函數(shù)又將設(shè)置VPTR指向它的 VTABLE,等.直到最后的構(gòu)造函數(shù)結(jié)束。VPTR的狀態(tài)是由被最后調(diào)用的構(gòu)造函數(shù)確定的。這就是為什么構(gòu)造函數(shù)調(diào)用是從基類到更加派生類順序的另一個(gè)理由。但是,當(dāng)這一系列構(gòu)造函數(shù)調(diào)用正發(fā)生時(shí),每個(gè)構(gòu)造函數(shù)都已經(jīng)設(shè)置VPTR指向它自己的VTABLE。如果函數(shù)調(diào)用使用虛機(jī)制,它將只產(chǎn)生通過它自己的VTABLE的調(diào)用,而不是最后的VTABLE(所有構(gòu)造函數(shù)被調(diào)用后才會(huì)有最后的VTABLE)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 赤水市| 鄂托克旗| 疏附县| 新营市| 大姚县| 永昌县| 九龙县| 西峡县| 南宫市| 焦作市| 鹤峰县| 大兴区| 永春县| 资中县| 丘北县| 沈阳市| 五大连池市| 锦州市| 阿拉善左旗| 吐鲁番市| 河北省| 麦盖提县| 鹤峰县| 通渭县| 天等县| 七台河市| 大同市| 石渠县| 太原市| 赤城县| 灵川县| 麦盖提县| 枣强县| 南和县| 鄱阳县| 洛宁县| 如东县| 古浪县| 清丰县| 永昌县| 如皋市|