2020-12-18(何种情况下编译器会提供默认构造函数)
當(dāng)問到大家什么時候會提供默認構(gòu)造函數(shù)時,有的人會不會一下子就想到當(dāng)我們沒有定義構(gòu)造函數(shù)的時候,它就會提供默認的構(gòu)造函數(shù),但我們想想一個問題,假如沒有意義的情況下提供了默認構(gòu)造函數(shù),那是不是把編譯器搞得像一個傻子一樣?其實呀,編譯器不傻。
所以總結(jié)如下:
下面兩種情況下,編譯器才會提供默認的構(gòu)造函數(shù):
a.本類.本類中定義的成員對象或者父類中有虛函數(shù)存在
解釋:由于需要初始化虛表,且這個工作理應(yīng)在構(gòu)造函數(shù)隱式完成,因此在沒有定義構(gòu)造函數(shù)的情況下,編譯器會添加默認的構(gòu)造函數(shù)用于隱式完成虛表的創(chuàng)建工作
b.父類或本類中定義的成員對象帶有構(gòu)造函數(shù)
解釋:在對象被定義時,由于對象本身為派生類,因此構(gòu)造順序?qū)崿F(xiàn)構(gòu)造父類再構(gòu)造自身。當(dāng)父類中帶有構(gòu)造函數(shù)時,將會調(diào)用父類的構(gòu)造函數(shù),而這個調(diào)用過程需要在構(gòu)造函數(shù)中完成,因此編譯器添加了默認的構(gòu)造函數(shù)來完成這個調(diào)用過程。成員對象帶有構(gòu)造函數(shù)的情況與此相同
在沒有定義構(gòu)造函數(shù)的情況下,當(dāng)類中沒有虛函數(shù)存在時,父類和成員對象也沒有定義構(gòu)造函數(shù)時,提供默認構(gòu)造函數(shù)已沒有任何意義,只會降低程序的執(zhí)行效率。
總結(jié)
以上是生活随笔為你收集整理的2020-12-18(何种情况下编译器会提供默认构造函数)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2020-12-16(虚析构函数,神逻辑
- 下一篇: 定义派生类和继承类(从汇编分析)