effective c++條款07

1.帶多態性質的基類應該聲明一個virtual析構函數,一個基類只要帶有任何虛函數,都應該聲明一個virtual析構函數
2.所有抽象類的析構函數都應該帶有一份實現,否則鏈接器會報錯(因爲派生類的析構最終會調用到基類的析構函數,如果基類的析構函數沒有提供實現,此時鏈接器找不到其實現,就會抱怨)
3.如果一個類不是被用作基類或者不是用於多態,則不應該聲明virtual析構函數,因爲聲明之後,類的組成部分中就多了一個vptr(virtual table ptr),vptr指向一個由函數指針組成的數組,稱爲vbtl(virtual table),每個帶有virtual函數的類都有一個virtual table
這個指針的大小可能是32位,可能是64位,視具體情況而定(我認爲跟編譯器和系統有關),所以一個Point類(兩個int)如果帶有一個虛函數的話,它的對象可能有(8+4)個字節,這就是結構臃腫,而且不能與其他64位的結構互相轉化

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章