C 物件模型 拷貝建構函式語義

2021-10-09 13:23:44 字數 2355 閱讀 1650

目錄引例

① 如果乙個類a沒有拷貝建構函式,但是含有乙個類型別ctb的成員變數m_ctb。該型別ctb含有拷貝建構函式,那麼當**中有涉及到類a的拷貝構造時,編譯器就會為類a合成乙個拷貝建構函式。

② 如果乙個類ctbson沒有拷貝建構函式,但是它有乙個父類ctb,父類有拷貝建構函式,當**中有涉及到類ctbson的拷貝構造時,編譯器會為ctbson合成乙個拷貝建構函式 ,呼叫父類的拷貝建構函式。

③如果乙個類ctbson沒有拷貝建構函式,但是該類宣告了或者繼承了虛函式,當**中有涉及到類ctbson的拷貝構造時,編譯器會為ctbson合成乙個拷貝建構函式

父類含有虛函式,子類沒有拷貝建構函式,則編譯器合成拷貝建構函式

④ 如果 乙個類沒有拷貝建構函式, 但是該類含有虛基類當**中有涉及到類的拷貝構造時,編譯器會為該類合成乙個拷貝建構函式

這個合成的拷貝建構函式,也是在 必要的時候才會被編譯器合成出來。

給類中新增簡單的類型別成員

某些情況下,如果我們不寫自己的拷貝建構函式,編譯器就會幫助我們合成出拷貝建構函式來。

那編譯器在什麼情況下會幫助我們合成出拷貝建構函式來呢?那這個編譯器合成出來的拷貝建構函式又要幹什麼事情呢?

class grand //爺爺類

C 物件模型學習筆記五 拷貝建構函式語義

測試驗證編譯器在什麼情況下會幫助我們合成出拷貝建構函式,及編譯器合成出來的拷貝建構函式又要幹什麼事情?拷貝建構函式語義 在下面情況下,如果我們不寫自己的拷貝建構函式,編譯器就會幫助我們合成出拷貝建構函式來。1 如果乙個類t沒有拷貝建構函式,但是含有乙個類型別ctb的成員變數m ctb。該型別ctb含...

C 建構函式語義學 三 基於C 物件模型

28分析 如果不引入虛基類,那麼在呼叫的時候,會發生呼叫衝突,編譯器不知道該呼叫那個資料成員。有了虛基類後,假設我們沒有定義自己的建構函式,那麼編譯器會為其合成乙個出來,生成乙個指向虛基類表的指標。關於虛基類的布局,以後再深入 總結 四種情況,編譯器會在需要的時候自己合成乙個預設的建構函式出來 1....

C 建構函式語義 預設建構函式

the c arm 告訴我們 預設建構函式會在需要的時候自動生成 被編譯器 然後 在需要的時候 是乙個很抽象的概念,本文主要描述的問題也正是這些需要的情況。我們看看下面的 片段 class foo void foo bar 使用者並沒有顯示地定義預設建構函式,編譯器會為它自動生成乙個無關緊要 tri...