1. 程式人生 > >虛擬函式的作用和實現原理

虛擬函式的作用和實現原理

2、底層實現原理:先來看看C++物件模型

這個模型從結合上面2中模型的特點,並對記憶體存取和空間進行了優化。在此模型中,non static 資料成員被放置到物件內部,static資料成員, static and nonstatic 函式成員均被放到物件之外。對於虛擬函式的支援則分兩步完成:

1.每一個class產生一堆指向虛擬函式的指標,放在表格之中。這個表格稱之為虛擬函式表(virtual table,vtbl)。

2.每一個物件被添加了一個指標,指向相關的虛擬函式表vtbl。通常這個指標被稱為vptr。vptr的設定(setting)和重置(resetting)都由每一個class的建構函式,解構函式和拷貝賦值運算子自動完成。

另外,虛擬函式表地址的前面設定了一個指向type_info的指標,RTTI(Run Time Type Identification)執行時型別識別是有編譯器在編譯器生成的特殊型別資訊,包括物件繼承關係,物件本身的描述,RTTI是為多型而生成的資訊,所以只有具有虛擬函式的物件在會生成