深度探索C 物件模型 1

2021-07-22 06:07:42 字數 1087 閱讀 4902

沒錯。。。就是這麼愛讀書的乙隻我(我會說是我買多了然後不看覺得可惜嗎。。。),但是這本書倒確實是老師一直推薦讓看。。。

template //過載輸出流,我用的不是很熟練剛好看到,溫習一下

os<<"(";

for(int ix = 0;ix os關於c++加上封裝後的布局成本:

關於非靜態資料成員直接內含在每乙個class object之中

而對於成員函式,雖然含在class的宣告之內,卻不出現在object(物件)之中,每乙個non-inline成員函式只會誕生乙個函式例項

每乙個"擁有乙個或者乙個定義"的inline function則會在其每乙個使用者(模組)身上產生乙個函式例項。

c++在布局以及訪問時間上的主要的額外負擔是由virtual引起的,包括

virtual function機制: 用以支援乙個有效率的"執行期繫結"

virtual base class:    用以實現"多次出現在繼承體系中的base class,有乙個單一而被共享的例項"。

1.1c++物件模式

兩種類資料成員:

static:存放在個別的類物件之外

nonstatic:存放在每乙個類物件之內

三種類成員函式:

static:個別的類物件之外

nonstatic:個別類物件之外

virtual:

(1)每乙個class產生出一堆只想虛函式的指標放在**中,**縮寫vtbl

(2)每乙個類物件被安插乙個指標,指向相關的虛表,指標縮寫vptr,指標的設定和重置都有每乙個類的構造拷貝或者析構自動完成,每乙個class關聯的type_info(具體實現方式依照編譯器而定) object也經由virtual table被指出來,通常放在**第乙個位址。

在簡單物件模型中,每乙個base class可以被derived class object內的乙個slot指出,該slot內含類的基類的子物件的位址,缺點是因為間接性會導致空間和訪問時間上的額外負擔,優點是class object的大小不會因為base classes的改變而受到影響。

c++凡是處於同乙個access section的資料,必定保證以其聲順序出現在記憶體布局當中。

p22

《深度探索C 物件模型》1

c 物件模型 多重繼承模型示意 第二章 建構函式 語意學 基類和派生類 在這裡,很容易理解合成的copy建構函式將vptr指向基類的虛函式表,不然不僅造成資料切割 sliced 函式呼叫也混亂了。返回值的初始化 在下述四種情況下必須使用成員初始化列表 上面的產生臨時string效率很低,修改後可以提...

深度探索C 物件模型 (1)關於物件

哎 再開新坑,希望19年能把開的這幾個坑都填上。class 類 class object 類物件 簡單來說,c 物件模型的例項的組成包括下面幾個部分 vtbl 0 指向type info objext vtbl 1 指向析構函式 vtbl 2 指向預設建構函式 繼承關係也可以指定為virtual,即...

深度探索c 物件模型(1) 關於物件

一 c 物件模型 1 nonstatic data members被存於class object內部,static data member static nonstatic function放在class object之外。2 虛函式則使用虛函式表 vtbl 每個object都有virtual fu...