1. 程式人生 > >C++ 編譯器生成預設建構函式的四種情況

C++ 編譯器生成預設建構函式的四種情況

     第一種是類成員中有成員是類物件,並且該成員的類含有預設建構函式,那麼C++編譯器會幫你給這個類也生成一個預設建構函式,用來呼叫其成員物件的建構函式,完成該成員的初始化構造。需要強調的是,如果這個成員的類也沒有給出預設建構函式,那麼C++編譯器也不會幫你生成該類的預設建構函式。

      第二種情況是這個類的基類有預設建構函式。那麼C++編譯器也會幫你生成該派生類的預設建構函式,以呼叫基類的預設建構函式,完成基類的初始化。另外還得強調一下的是,如果基類沒有提供這個預設構造的函式,那麼C++編譯器也不會為派生類生成預設的建構函式(這裡包括兩層意思,第一,基類沒有任何形式建構函式;第二,基類存在其他形式的非預設建構函式,當然了,這種型別就是編譯不過的,道理很明顯)。

      第三種情況是類中存在虛擬函式,那麼C++編譯器會為你生成預設建構函式,以初始化虛表(虛擬函式表vftable)。

      第四種情況是存在虛基類,那麼C++編譯器會為你生成預設建構函式,以初始化虛基類表(vbtable)。