C 虛函式語義學

2021-07-02 18:47:58 字數 488 閱讀 6427

c++中的多型通過虛函式表實現,需要在執行時,根據指標所指物件的實際型別,根據物件中的虛函式表指標來索引相應的虛函式來呼叫。

對於class derived : public base1, public base2

base2 *pbase2 = new derived

pbase2會調整this指標,使pbase2 指向 base2 subobject; 基類指標指向派生類時,實際都會調整,指向派生類中的基類的子物件subobject。

就像派生類的建構函式最在開始呼叫基類的建構函式,派生類的析構函式會在末尾呼叫基類的析構函式。基類的析構函式為虛的,那麼派生類的析構函式自動為虛,雖然可以沒有virtual 宣告。

由於基類的引用和指標可以指向派生類,只有在執行時才能知道基類指標指向的到底是什麼物件,所以物件的銷毀必須等到執行時才能決定是呼叫哪乙個析構函式。因為如果基類的析構函式非虛,在編譯器就確定,當執行時若基類引用或指標指向的是派生類的物件的話,就可能會發生記憶體的銷毀錯誤。

C 函式語義學

我們或許會認為呼叫類成員函式的開銷會大於呼叫普通函式,但是其實不是這樣的,呼叫普通成員函式和全域性函式開銷差不多,我們可以在vs中除錯,檢視反彙編 普通成員函式在呼叫的時候編譯器會在傳遞乙個物件的this指標 eg includeusing namespace std class a void te...

建構函式語義學

有些書上說,如果乙個類中沒有任何的建構函式,那麼編譯器會為我們預設的合成乙個 合成預設規則函式 其實,系統是在 必要的時候 才會為我們合成預設的建構函式。這個可以去分析obj檔案 情況1 如果乙個類中沒有任何的建構函式,且它的成員變數中含有乙個類型別的成員,那麼這個時候系統會為這個類合成乙個預設的建...

建構函式語義學之程式轉化語義學 2

在 建構函式語義學之程式轉化語義學 1 中編譯器做了一些優化,有時他還會給你的程式更多的優化 1 在使用者層面做優化 如果程式設計師頂乙個計算用的 constructor x bar const t y,const t z x xx 以 y 和 z 來處理 xx return xx 有的編譯器開發人...