做為面試官 當你問 C++虛析構函數 的作用時你期望的答案是什麼?

為什麼我剛說出虛函數表三個字,對方就說你可能理解錯我意思了


為了正確析構指向派生類實例的基類指針。

Base* pA = new Derived();
delete pA;


虛函數的實現一般用虛函數表,當然也包括虛析構函數

對方問你「虛析構函數的作用」很明顯是特別針對析構函數提問,而且問的是作用,而不是編譯器對其的實現


虛函數表 不是四個字么……哪裡是三個字……


正確的套路是,你回答防止內存泄露,然後他說怎麼防止,你巴拉巴拉說一下這個虛析構怎麼執行的,然後他問你為什麼會這麼執行,你巴拉巴拉巴拉虛函數表什麼的。你明顯是不按套路出牌啊,他可能有如下幾個感覺:1,這人思維還挺活;2,但是溝通起來可能會有困難;


1. 保證正確析構

2. 如果基類析構函數是純虛的,要給它一個空的實現。並且說說為什麼。


說明這個類是鼓勵被繼承的


為了基類指針析構派生類對象不會出問題


當用基類的指針或引用指向派生類時,如果析構函數非虛,則派生類的析構不會被調用,造成內存泄漏。


期望面試者要100%匹配自己的心理答案,是不恰當的。面試的過程是在於發現對方會什麼,很多時候意思差不多到了也就可以了。要知道很多問題答案是可以靠短期突擊的。

條件允許的話,上機測試更好,直接看解決問題能力


當你用基類指針指向某個派生類對象,delete該對象時,如果基類析構函數不是虛函數,則該對象析構會異常。


正確的釋放釋放基類和派生類...

書上的標答`(*∩_∩*)′


effective c++ 條款07


因為你答的不是作用啊...先給他想要的,再看看要不要自由擴展發揮吧。


上面的大神正解。也許你也懂他說的,但你想從再底層一些的角度開始講,但這樣的回答方式不太適合面試這樣的場景。先把最直接的答案說出來,再看面試人的反應,再決定要不要繼續補充。


直接說虛函數表,說明沒有直接答道點子上。

這種情況可能是因為你沒有理解,只是隨便看了點兒虛函數相關的知識;或者雖然你理解了,懂得也很多,但是思路不清晰,抓不住重點。

我在面試的時候也吃過這個虧。

建議簡單明了的回答,不要鋪墊那麼多。

面試里應該使用@He Pan 給的回答思路。


期望聽到他都用smart pointer了,所以虛析構寫不寫沒必要


推薦閱讀:

如何評價CUDA、OpenCL、OpenMP、OpenACC等主流並行運算框架?
如何看待通信和計算機的發展前景對比?
我想配一台5000左右的台式機。主要玩玩NBA 2K17系列,LOL 的電腦希望大神來個可靠配置?
如果沒有周鴻禕,中國的殺毒軟體市場會是怎樣一番格局?
編程新手先學 C 語言還是 Pascal?

TAG:軟體開發 | 計算機 | C | 面試問題 |