看了《深度搜索C++對象模型》,做了一些小實驗侣滩,真正值得注意的口注,其實只有兩個章節(jié)。其他的章節(jié)太過繁瑣胜卤,要么就是個人覺得沒有意義疆导。
第二章:構(gòu)造函數(shù)語義學(xué)
第四章:Function語義學(xué)
接下來會
(1)程序員應(yīng)該如何理解多態(tài)赁项、繼承葛躏、Function語義學(xué)之間的關(guān)系澈段。
(2)拷貝構(gòu)造函數(shù)在編譯器中的使用和轉(zhuǎn)換特征。
(3)C++中move語義對我們的作用舰攒。
多態(tài)
- 多態(tài):多種狀態(tài)
- 主要用途:經(jīng)由一個共同的接口來影響類型的封裝败富,這個接口通常被定義在一個抽象的base class中
- C++支持多態(tài)的方法:
1.隱式的轉(zhuǎn)換操作。
2.虛函數(shù)機制摩窃。
3.dynamic_cast和typeid運算符兽叮。
程序員視角
多態(tài)分兩類,靜態(tài)多態(tài)和動態(tài)多態(tài)猾愿。
- 靜態(tài)多態(tài):重載鹦聪。
- 動態(tài)多態(tài):①位于繼承體系之下。②由虛函數(shù)機制支持蒂秘。③使用引用或指針調(diào)用該特性泽本。
我們確認了幾個條件:虛函數(shù)離不開繼承,使用多態(tài)離不開類的繼承姻僧。
繼承
- 繼承:is-a
- 主要用途:略
- 繼承的主要方式:
1.單一繼承规丽。
2.多重繼承。
3.虛繼承撇贺。
程序員視角
子類繼承了父類的特性赌莺。
虛函數(shù)機制
C++對象模型:
- class:vtbl
- object:vptr
程序員視角
問題一、在C++對象模型中松嘶,一個類對象艘狭,是如何在內(nèi)存中描述的?
- 1.數(shù)據(jù)成員:static翠订、non-static
- 2.函數(shù)成員:static缓升、non-static、virtual
問題二蕴轨、經(jīng)過單一繼承以后港谊,以上成員是如何描述的?
問題三橙弱、經(jīng)過多重繼承以后歧寺,以上成員是如何描述的?
核心:指針調(diào)整棘脐。
問題四斜筐、經(jīng)過虛擬繼承以后,以上成員是如何描述的蛀缝?
拷貝構(gòu)造函數(shù)語義學(xué)
- 使用場景
1.顯式初始化操作顷链。
2.作為參數(shù)傳給某個函數(shù)。
3.傳回一個object屈梁。
拷貝構(gòu)造函數(shù)的定義 X::X(const X& x); - NRV優(yōu)化
核心:
通過修改函數(shù)原型嗤练,傳入引用榛了,實現(xiàn)臨時對象的使用。
C++11中move語義
Move語義:邏輯上是移動的煞抬,實現(xiàn)資源竊取霜大。
1.與淺拷貝構(gòu)造函數(shù)區(qū)別。
move是安全的革答。
2.如何使用move語義战坤?
- 右值引用:右值是一個臨時對象,令其存在-->右值引用残拐。
- 使用:當表達式為右值途茫,在C++11中,優(yōu)先調(diào)用Move語義構(gòu)造溪食。