【我的紀錄】C++面試總結之一(多態)

不嚴謹之處較多,歡迎大佬指正,在學習的路上不斷狂奔
好比面試官問了一個多態問題,而後就能夠針對多態這個問題適當展開,不至於問你一個就回答這一個問題,沒法徹底展現本身技能,適當的展開能夠爲面試加分喲
開始:
多態分爲靜態多態、動態多態。靜態多態,重載,就是在同一做用域內,函數名相同,參數不一樣,根據參數來肯定調用。動態多態,重寫,主要是虛函數,父類指針指向子類對象,接着再用指針調用被重寫函數。一個類有虛函數,就有虛函數表,虛函數表裏存放的就是每一個虛函數的地址,若子類未重寫虛函數,那麼虛函數表中的虛函數的地址就仍是父類的虛函數的地址,一旦子類重寫了,那麼這個地址就會變成重寫以後的虛函數的地址。
說到虛函數,若是 一個類要子類,那麼它的析構函數必定要聲明爲虛函數,否則會形成內存泄漏,緣由在於,若是父類的析構函數不是虛函數,那麼在銷燬對象時,只會調用父類析構函數,子類對象沒法釋放,致使內存泄露;若是父類析構函數是虛函數。那麼在釋放時,首先調用子類析構,使得子類對象得以釋放,接着進入父類析構,釋放父類對象,這樣父類子類都得以徹底釋放。這就是爲何父類析構必須是虛函數的緣由。
再講到內存泄漏,內存泄漏是C++開發中比較容易出現的現象,往輕的說,一個項目運行速度及效率會下降,慢慢變卡,體驗會急劇降低,嚴重的話可能會致使機器崩潰和死機,因此在開發過程當中內存泄漏須要尤其重視。動態分配內存比較經常使用,比較容易出現未釋放或者釋放不徹底的狀況,也很難發現哪塊形成內存泄漏了,能夠經過一些內存泄漏檢測工具來定位防止,這個後面講。這裏着重說一下C++令一個有效防止內存泄漏的方法—智能指針!
智能指針有自動指針、共享指針、惟一指針、弱指針。
若使用智能指針,則不需程序員本身釋放,智能指針機制就是自動釋放已申請的內存。auto_ptr在C++11當中雖然已標爲棄用,但還能夠用,在C++17中就徹底移除了。緣由在於auto_ptr在釋放的時候使用delete而不使用delete[],這樣就會形成內存泄漏,故再也不使用。還有惟一指針、弱指針、共享指針。這裏說一下比較重要的共享指針,只說核心:多個指針指向同一塊內存,在這塊內存上每多一個指針指向它,那麼它的引用計數就會+1,在釋放的時候,每釋放一個指針,那麼它的引用計數就會-1,直到它的引用計數減到0,纔會獲得徹底釋放。
經過檢測工具來排查內存泄漏事件是一個很是有效的手段。上面提到了VLD內存泄漏檢測工具,該工具運行起來後可直接在項目中看到那一塊形成內存泄漏了,甚至能夠具體看到哪一行有問題,定位出來以後能夠針對性避免,能夠大大提升產品的健碩性。
提到內存泄漏就難以不提到內存溢出,內存泄漏基本就是未釋放或者釋放不徹底致使,那麼內存溢出呢,舉個很簡單的例子:好比如今須要開闢10個字節的內存,可是系統只剩5個字節的大小了,這個時候就會形成內存溢出;再有就是數組溢出也是內存溢出的典型示例。這樣就能夠很清楚的搞明白泄漏和溢出是怎麼回事了。程序員

相關文章
相關標籤/搜索