首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

深度探索 C++ 物件模型 (二):從簡單模型到 C++ 實作的演進

     編輯:關於C++

續接前文筆記,本文梳理 C++ 物件模型從理論模型到實際實作的演進邏輯,重點解析虛函數表機制的空間/時間優化權衡。

閱讀建議:技術書的正確打開方式

讀者史列因建議:第一章為總覽,初讀不求甚解,先通讀全書建立整體框架,再回頭精讀。技術書理解重於死記,卡住時放下、跳過、運動休息,回頭豁然開朗。此書字字珠璣,反覆研讀方見功力。

三種物件模型演進

1. 簡單物件模型

每個物件 = 一系列槽位,每槽指向一個成員(資料或函數)。概念直觀但未考慮效率。

2. 雙表格驅動模型

建構物件時建立類似指標陣列:

  • 資料成員表:儲存所有資料成員位址
  • 成員函數表:儲存所有成員函數位址
  • 物件本身持有指向兩表的指標

比喻:寫字樓 = 類,人員 = 資料成員,租戶公司 = 成員函數。物業管理處登記人員花名冊(資料表)與公司房間號牌(函數表),大廳牆上掛牌索引。

3. C++ 物件模型(實際採用)

從雙表格模型優化而來,引入虛函數表 (vtable):

  • 每個類別產生一張虛函數指標表
  • 每個物件新增 vptr 指向對應 vtable
  • vptr 由建構函數、解構函數、複製指派運算子自動維護

比喻延伸:物業針對長期穩定人員/公司不再逐一登記,僅管理變動項目,提升效率。

核心權衡:效率 vs 彈性

模型空間/存取效率彈性應用程式變更影響
雙表格模型較低高(動態增刪成員)無需重新編譯
C++ 模型高(優化後)低(靜態結構)需重新編譯

C++ 選擇編譯期決議、犧牲執行期彈性換取極致效能,符合「不為未用特性付費」哲學。

學習心法

《深度探索 C++ 物件模型》無次要章節,每個字都值得咀嚼。反覆閱讀、動手實驗(觀察物件佈局、vptr 位置、多重繼承指標調整),方能真正開竅。堅持下去,我們都在路上。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved