深度探索C++對象模型的讀書心得

參考:深度探索C++對象模型 (stanley B.Lippman著 侯捷翻譯)

1. Page9 : C++對象模型,說明每一個類僅有一個虛函數表Vtbl,而類的每一個對象都有指向其表的指針。

2. Page30:引用也需要與一個指針(大小爲4BYTE)相同的空間。

3. Page28: 指針類型會教導編譯器如何解釋某個特定地址中的內存內容及大小。

4. Page39: explicit關鍵字能夠制止“單一參數的constructor被當做一個Conversion運算符”

5. Page42: 被合成的default constructor只滿足編譯器的需要,而不是程序的需要。

6. Page53: 當一個類不展現bitwiste copy semantics(位逐次拷貝)需要編譯器合成一個。

7. Page74:NRV(Name return value)也即是函數有返回值,其可以用在參數列表中多加一個參數來進行優化。

8. Page88:即使一個類class沒有任何object實體,其static data memebers也已經存在。

9. Page92:只有含有virtual函數的類的對象,纔有vptr指針。

10.Page95:每一個member的存取許可(private/public/protected),以及與class的關聯,並不會導致任何空間上或執行時間上的額外負擔------不論是在個別

的class objects或是在static data member本身。

11.Page97: name-mangling名字改編,名字重整

12.Page102:C++語言保證”出現在derived class中的base class subobject有其完整原樣性“。

13.Page113:多重繼承的問題主要發生於derived class objects和其第二或後繼的base class objects之間的轉換。

14.Page145:如果聲明extern ”c” 會壓抑non member fuction的“mangling”效果。

15.Page153:在C++中,多態表示“以一個public base class的指針(或引用)尋址出一個derived class object”的意思。

16.Page164:在多重繼承之下,一個derived class內含n-1個額外的virtual tables(也就是其共有n個虛表),n表示其上一層的base classes的數目,因此

單一繼承將不會有額外的virtual tables。


在學習C++對象模型的時候,我們主要學習編譯器在背後爲我們做了什麼?如何做的?爲什麼這麼做?(其主要還是爲了時間、空間的效率以及與C的兼容性來考慮的)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章