a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C > 正文

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

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

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

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

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

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

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 久久免费网 | 国产二区视频 | 亚洲性免费视频 | 亚洲精品成人无限看 | 欧美日韩成人免费 | 日韩国产中文字幕 | 久久精品欧美一区二区三区麻豆 | 日产精品久久久一区二区 | 欧美成人伊人 | 午夜在线 | 美日韩免费视频 | 亚洲毛片| 久产久精品 | 超碰激情 | 草草视频在线观看 | 亚洲欧美日韩在线 | 亚洲一区中文 | 97色干| www.成人.com| 国产一区二区三区久久 | 亚洲一二三区在线观看 | 成人网在线 | 免费色网址 | 久久99深爱久久99精品 | 中文字幕在线视频网站 | av最新在线 | 五月婷婷综合激情 | 美女视频黄又黄又免费 | 久久久成人网 | 国产探花在线精品一区二区 | 91麻豆精品 | 91天堂| 日本中文字幕在线观看 | 成人在线免费观看 | 黄av在线播放 | av久久 | 国产 日韩 欧美 中文 在线播放 | 欧美一区永久视频免费观看 | 久久精品网| 免费看a| 欧美亚洲三级 |