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

C++ 對象內存佈局深度解析:單繼承、多重繼承、虛繼承與虛表指針

     編輯:C++ 入門

影響佈局的核心因素

  • 非靜態成員變量(按聲明順序)
  • 虛函數表指針 vptr(通常位於對象起始處)
  • 繼承方式:單繼承、多重繼承、虛繼承

單繼承佈局

子類對象 = 父類子對象(含 vptr、成員)+ 子類自有成員。虛函數表合併:父類虛函數在前,子類新增虛函數在後;覆蓋函數替換父類表項。單一 vptr。

多重繼承佈局

每個直接父類對應一個子對象,各含獨立 vptr。子類成員置於最後。第一個父類的 vptr 位於對象起始,子類覆蓋的虛函數會同時更新所有父類 vtable 中對應槽位(保證多態正確)。

虛繼承佈局

虛基類子對象在內存中僅保留一份,通常放在最末端。派生類對象包含指向虛基類的指針(或偏移量),通過 vbptr(虛基類表指針)間接訪問。解決菱形繼承數據冗餘與二義性。

實驗驗證代碼模式

typedef void(*Fun)();
int **vptr = (int**)&obj;
for (int i=0; i

文中提供單繼承、多重繼承、重復繼承、虛繼承的完整類定義與內存佈局圖示,並給出可直接編譯運行的驗證代碼,輸出虛表函數地址與成員值,極具參考價值。

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