對(duì)C++默認(rèn)構(gòu)造函數(shù)的一點(diǎn)重要說(shuō)明
大多數(shù)C++書(shū)籍都說(shuō)在我們沒(méi)有自己定義構(gòu)造函數(shù)的時(shí)候,編譯器會(huì)自動(dòng)生成默認(rèn)構(gòu)造函數(shù)。其實(shí)這句話我一直也是
深信不疑。但是最近看了一些資料讓我有了一點(diǎn)新的認(rèn)識(shí)。
其實(shí)我覺(jué)得大多數(shù)C++書(shū)籍之所以這樣描述其實(shí)是玩了文字游戲的。如果說(shuō)編譯器自動(dòng)產(chǎn)生的默認(rèn)構(gòu)造函數(shù)對(duì)于我們
的類沒(méi)有任何作用,也就是說(shuō)在編譯器默認(rèn)生成的這個(gè)構(gòu)造函數(shù)里根本沒(méi)有任何實(shí)質(zhì)性的代碼工作,那么這種默認(rèn)構(gòu)
造其實(shí)是可有可無(wú)的,所以不妨說(shuō)編譯器其實(shí)是為每個(gè)類生成了默認(rèn)構(gòu)造函數(shù)的。
在深度探索C++對(duì)象模型中講了四種關(guān)于編譯器自動(dòng)生成默認(rèn)構(gòu)造函數(shù)的情況,在這四種情況下生成的默認(rèn)構(gòu)
造函數(shù)里面是由實(shí)質(zhì)的隱含代碼操作的:
1、 如果類A成員中含有某個(gè)類B的對(duì)象,恰好類B也顯示定義了構(gòu)造函數(shù),那么在產(chǎn)生類A對(duì)象的時(shí)候編譯器會(huì)產(chǎn)生一個(gè)默認(rèn)構(gòu)造函數(shù),在這個(gè)默認(rèn)構(gòu)造函數(shù)中提供了調(diào)用類A構(gòu)造函數(shù)的代碼。
2、如果類B繼承于類A,且類A顯示定義了構(gòu)造函數(shù),那么在生成類B對(duì)象的過(guò)程中編譯器同樣會(huì)產(chǎn)生一個(gè)默認(rèn)構(gòu)造函數(shù),在這個(gè)構(gòu)造函數(shù)中提供調(diào)用基類A構(gòu)造函數(shù)的代碼。
3、如果某個(gè)類含有虛函數(shù),那么編譯器會(huì)自動(dòng)產(chǎn)生一個(gè)默認(rèn)構(gòu)造函數(shù)以提供虛表指針相關(guān)的初始化操作。
4、如果一個(gè)類虛繼承于其他類,那么同樣的編譯器會(huì)為該類產(chǎn)生默認(rèn)的構(gòu)造函數(shù)。
除以上四種情況,編譯器都不產(chǎn)生默認(rèn)構(gòu)造函數(shù),因?yàn)榫退憔幾g器產(chǎn)生了默認(rèn)構(gòu)造函數(shù),然而在該默認(rèn)構(gòu)造函數(shù)中沒(méi)有實(shí)質(zhì)的內(nèi)容,那么這個(gè)默認(rèn)構(gòu)造函數(shù)也就是沒(méi)存在的意義的,那么我們說(shuō)編譯器不產(chǎn)生也無(wú)妨吧。
以上就是小編為大家?guī)?lái)的對(duì)C++默認(rèn)構(gòu)造函數(shù)的一點(diǎn)重要說(shuō)明全部?jī)?nèi)容了,希望大家多多支持腳本之家~
- C++關(guān)于構(gòu)造函數(shù)可向父類或者本類傳參的講解
- C++中構(gòu)造函數(shù)的參數(shù)缺省的詳解
- C++ 中構(gòu)造函數(shù)的實(shí)例詳解
- C++中的移動(dòng)構(gòu)造函數(shù)及move語(yǔ)句示例詳解
- C++類繼承之子類調(diào)用父類的構(gòu)造函數(shù)的實(shí)例詳解
- 詳解C++ 編寫(xiě)String 的構(gòu)造函數(shù)、拷貝構(gòu)造函數(shù)、析構(gòu)函數(shù)和賦值函數(shù)
- C++ 構(gòu)造函數(shù)中使用new時(shí)注意事項(xiàng)
- C++中構(gòu)造函數(shù)與析構(gòu)函數(shù)的調(diào)用順序詳解
- 詳談C++何時(shí)需要定義賦值/復(fù)制構(gòu)造函數(shù)
- 關(guān)于C++復(fù)制構(gòu)造函數(shù)的實(shí)現(xiàn)講解
相關(guān)文章
C++ OpenCV實(shí)戰(zhàn)之網(wǎng)孔檢測(cè)的實(shí)現(xiàn)
這篇文章主要介紹了如何利用C++和OpenCV實(shí)現(xiàn)網(wǎng)孔檢測(cè),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)OpenCV有一定幫助,感興趣的小伙伴可以了解一下2022-05-05C語(yǔ)言實(shí)現(xiàn)BMP格式圖片轉(zhuǎn)化為灰度
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)BMP格式圖片轉(zhuǎn)化為灰度,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10C語(yǔ)言的程序環(huán)境與預(yù)處理你真的了解嗎
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言的程序環(huán)境與預(yù)處理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-02-02基于C語(yǔ)言實(shí)現(xiàn)的貪吃蛇游戲完整實(shí)例代碼
這篇文章主要介紹了基于C語(yǔ)言實(shí)現(xiàn)的貪吃蛇游戲完整實(shí)例代碼,對(duì)于學(xué)習(xí)游戲開(kāi)發(fā)的朋友有一定的借鑒價(jià)值,需要的朋友可以參考下2014-08-08