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 編譯器也不會幫你生成該類的預設建構函式。二 這個類的基類有預設建構函式。...