筆記:深度探索C++物件模型 第一章

摘要

C++ Object Model

一般來說有三種實作方式:

1.Simple: 一個Object內有一個 slot table, table 中各 slot 指向一個 member.

2.Table: 把 member 和 function 抽出來為 兩個 table, 物件內含一指標指向這兩個 table, 而 function
table 又指向各 function.

3.目前一般常見 C++ Compiler 所採用的物件模型, 則是將 member 放在物件中,物件內含一指標指向 function table,
而 static member 則另外存放於 heap 中.

繼承

早期,直接把 base class member 含括到 derived class, 較快; 但若 base class 變更,會造成 derived
class 需重新 compile.

2.0 規格以後,為有關聯的 virtual base class 加上指標:

  1. 導入 virtual base class table
  2. 擴充現有的 virtual table

簡單的說就是在衍生類別中加上指標指回 base class 的 member 和 function.

 

虛擬繼承

亦可指定 virtual, 如 iostream

class istream: virtual public ios {...};
class ostream:virtual public ios {...};

此情況下, base class 不管在繼承串列中被衍生幾次,均只存在一個實體,上例中, ios 將只存在一個.

 

class 和 struct

class 和 struct 幾乎相同,但仍然請依照需要乖乖使用.

 

多型

只有透過 pointer 或 reference 的間接處理,才支援多型.