C++面試題(三)

1.虛函數(shù)表存放的內(nèi)容
答:虛函數(shù)表實際是一個數(shù)組醒叁,數(shù)組里存放的是虛函數(shù)的地址指針灾炭,指向虛函數(shù)夫植。
虛函數(shù)表的由來:如果一個類中有虛函數(shù)讹剔,則每一個該類的對象都會被編譯器添加一個成員:虛函數(shù)表指針油讯,這個虛函數(shù)表指針指向虛函數(shù)表,虛函數(shù)表本質(zhì)是一個數(shù)組延欠,數(shù)組中存放類中虛函數(shù)地址指針陌兑,指向虛函數(shù)。

2.虛函數(shù)表指針與虛函數(shù)表的存放位置★
答:(當前的答案不一定正確僅供參考)
①虛函數(shù)表是class specific的由捎,也就是針對一個類來說的兔综,這里有點像一個類里面的staic成員變量,即它是屬于一個類所有對象的狞玛,不是屬于某一個對象特有的软驰,是一個類所有對象共有的。
②虛函數(shù)表是編譯器來選擇實現(xiàn)的为居,編譯器的種類不同碌宴,可能實現(xiàn)方式不一樣,就像前面我們說的vptr在一個對象的最前面蒙畴,但是也有其他實現(xiàn)方式贰镣,不過目前gcc 和微軟的編譯器都是將vptr放在對象內(nèi)存布局的最前面。
③實際上虛函數(shù)指針是在構(gòu)造函數(shù)執(zhí)行時初始化的膳凝,而虛函數(shù)表是存放在可執(zhí)行文件中的碑隆。在gcc編譯器的實現(xiàn)中虛函數(shù)表vtable存放在可執(zhí)行文件的只讀數(shù)據(jù)段.rodata中

3.構(gòu)造函數(shù)可以是虛函數(shù)嗎,為什么蹬音?
答:不可以上煤,可以從兩方面解釋:第一,虛函數(shù)的作用就是在于信息不全的時候可以重載函數(shù)得到對應(yīng)的調(diào)用著淆。構(gòu)造函數(shù)本身就是要初始化實例劫狠,那使用虛函數(shù)也就沒有實際意義。所以構(gòu)造函數(shù)沒有必要是虛函數(shù)永部;第二独泞,每一個虛函數(shù)對象對應(yīng)一個虛函數(shù)指針,指向該類的一個虛函數(shù)表苔埋,虛函數(shù)指針內(nèi)存被分配在虛函數(shù)對象存儲空間的頭部懦砂,而一個類中虛函數(shù)表的創(chuàng)建是在構(gòu)造函數(shù)中被創(chuàng)建的,如果構(gòu)造函數(shù)本身就是虛函數(shù)组橄,那在執(zhí)行構(gòu)造函數(shù)的時候就需要找對應(yīng)的虛函數(shù)指針和虛函數(shù)表荞膘,而此時虛表指針和虛表還沒有被創(chuàng)建,則無法完成查找虛表而報錯玉工。
用一個不太恰當?shù)谋扔鳎豪缫粋€顯赫的家族(相當于一個類)羽资,里面可能有很多人享受著祖上的財富而吃喝玩樂,虛度光陰(虛成員函數(shù))遵班,但是在一個家族中削罩,歸根到底總要有一個刻苦努力的人來打下基業(yè)(創(chuàng)建虛函數(shù)表)瞄勾,這個能干有才的人就是構(gòu)造函數(shù)。如果假設(shè)這個打基業(yè)的人也是一個無所事事的人弥激,那豈不是打了個寂寞,后面的假設(shè)也就都不成立了愿阐。

4.析構(gòu)函數(shù)可以是虛函數(shù)嗎微服,為什么?
答:析構(gòu)函數(shù)可以是虛函數(shù)缨历,且一般基類的析構(gòu)函數(shù)均設(shè)置為虛函數(shù)以蕴,如果基類析構(gòu)函數(shù)不為虛函數(shù),那么當new-delete指向子類對象的基類指針時辛孵,執(zhí)行的操作如下:
基類構(gòu)造函數(shù)-子類構(gòu)造函數(shù)-基類的析構(gòu)函數(shù)丛肮;
從而導致子類沒有執(zhí)行子類的析構(gòu)函數(shù)而導致內(nèi)存泄露。
當基類的析構(gòu)函數(shù)被設(shè)置為虛函數(shù)時魄缚,當new-delete指向子類對象的基類指針時宝与,執(zhí)行的操作如下:
基類構(gòu)造函數(shù)-子類構(gòu)造函數(shù)-子類析構(gòu)函數(shù)-基類析構(gòu)函數(shù);
這樣就保證內(nèi)存空間不會產(chǎn)生泄露冶匹。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末习劫,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子嚼隘,更是在濱河造成了極大的恐慌诽里,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件飞蛹,死亡現(xiàn)場離奇詭異谤狡,居然都是意外死亡,警方通過查閱死者的電腦和手機卧檐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門墓懂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人泄隔,你說我怎么就攤上這事拒贱。” “怎么了佛嬉?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵逻澳,是天一觀的道長。 經(jīng)常有香客問我暖呕,道長斜做,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任湾揽,我火速辦了婚禮瓤逼,結(jié)果婚禮上笼吟,老公的妹妹穿的比我還像新娘。我一直安慰自己霸旗,他們只是感情好贷帮,可當我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著诱告,像睡著了一般撵枢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上精居,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天锄禽,我揣著相機與錄音,去河邊找鬼靴姿。 笑死沃但,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的佛吓。 我是一名探鬼主播宵晚,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼辈毯!你這毒婦竟也來了坝疼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤谆沃,失蹤者是張志新(化名)和其女友劉穎钝凶,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體唁影,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡耕陷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了据沈。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片哟沫。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖锌介,靈堂內(nèi)的尸體忽然破棺而出嗜诀,到底是詐尸還是另有隱情,我是刑警寧澤孔祸,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布隆敢,位于F島的核電站,受9級特大地震影響崔慧,放射性物質(zhì)發(fā)生泄漏拂蝎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一惶室、第九天 我趴在偏房一處隱蔽的房頂上張望温自。 院中可真熱鬧玄货,春花似錦、人聲如沸悼泌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽馆里。三九已至惩坑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間也拜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工趾痘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留慢哈,地道東北人。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓永票,卻偏偏與公主長得像卵贱,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子侣集,可洞房花燭夜當晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容