續接前文筆記,本文梳理 C++ 物件模型從理論模型到實際實作的演進邏輯,重點解析虛函數表機制的空間/時間優化權衡。
讀者史列因建議:第一章為總覽,初讀不求甚解,先通讀全書建立整體框架,再回頭精讀。技術書理解重於死記,卡住時放下、跳過、運動休息,回頭豁然開朗。此書字字珠璣,反覆研讀方見功力。
每個物件 = 一系列槽位,每槽指向一個成員(資料或函數)。概念直觀但未考慮效率。
建構物件時建立類似指標陣列:
比喻:寫字樓 = 類,人員 = 資料成員,租戶公司 = 成員函數。物業管理處登記人員花名冊(資料表)與公司房間號牌(函數表),大廳牆上掛牌索引。
從雙表格模型優化而來,引入虛函數表 (vtable):
vptr 指向對應 vtablevptr 由建構函數、解構函數、複製指派運算子自動維護比喻延伸:物業針對長期穩定人員/公司不再逐一登記,僅管理變動項目,提升效率。
| 模型 | 空間/存取效率 | 彈性 | 應用程式變更影響 |
|---|---|---|---|
| 雙表格模型 | 較低 | 高(動態增刪成員) | 無需重新編譯 |
| C++ 模型 | 高(優化後) | 低(靜態結構) | 需重新編譯 |
C++ 選擇編譯期決議、犧牲執行期彈性換取極致效能,符合「不為未用特性付費」哲學。
《深度探索 C++ 物件模型》無次要章節,每個字都值得咀嚼。反覆閱讀、動手實驗(觀察物件佈局、vptr 位置、多重繼承指標調整),方能真正開竅。堅持下去,我們都在路上。