C 編譯器何時提供預設的建構函式和拷貝建構函式

2021-08-23 11:18:14 字數 626 閱讀 1378

2023年08月27日 星期三 10:16

總的來說,編譯器只在它需要的時候才會合成乙個預設建構函式,或者擴張所有已存在的建構函式。

乙個類滿足下列其中任何乙個條件:

1.包含了乙個類的物件,這個物件有乙個建構函式(包括編譯器合成的預設建構函式)

2.如果繼承自一些基類,其中某些基類有乙個建構函式(包括編譯器合成的預設建構函式)

3.有乙個虛函式,或者繼承到了虛函式

4.有虛基類

如果這個類沒有預設的建構函式,編譯器就會合成乙個預設的建構函式,分別做以下事情

如果這個類有建構函式,編譯器就會擴張所有建構函式,做以下事情

1.呼叫這個物件的建構函式

2.呼叫基類的建構函式

3.設定正確的虛函式表指標

4.設定指向虛基類物件的指標

如果乙個類不滿足上面的4個條件,並且沒有提供建構函式,編譯器也不會為這個類提供預設的拷貝建構函式。

拷貝建構函式類似,對於1,2,判斷是否有拷貝建構函式,並呼叫拷貝建構函式,3,4相同。

但有一點截然不同,即使乙個類不滿足以上4個條件,並且類沒有提供拷貝建構函式,編譯器也會合成乙個預設的拷貝建構函式,它用位元組拷貝的方式拷貝物件。

這種東西實在有些無聊,不是為了找工作才不研究。

C 編譯器何時為使用者提供預設建構函式

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

C 編譯器何時為使用者提供預設建構函式

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

C 何時才提供預設建構函式

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