什么是默認構造函數?


轉載:https://blog.csdn.net/bear_n/article/details/72798301

對於C++默認構造函數,我曾經有兩點誤解:

  • 類如果沒有定義任何的構造函數,那么編譯器(一定會!)將為類定義一個合成的默認構造函數;
  • 合成默認構造函數會初始化類中所有的數據成員;

在看《Effective C++》時,條款05《了解C++默認編寫並調用哪些函數》中說到“….惟有當這些函數被需要(被調用),它們才會被編譯器創建出來。

“這些函數“指的是編譯器版本的拷貝構造函數賦值操作符析構函數,如果類中沒有生命任何構造函數,編譯器還會為類聲明一個default默認構造函數

這些函數都是public且inline的;

也就是說,默認構造函數“被需要”的時候編譯器才會幫我們合成,那什么情況才是默認構造函數”被需要“呢?

這個問題《Effective C++》並沒有給出答案,直到看了《深度探索C++對象模型》,才明白了編譯器何時才會幫我們合成一個默認構造函數。

 

什么是默認構造函數?

 

默認構造函數是可以不用實參進行調用的構造函數,它包括了以下兩種情況:

 

  1. 沒有帶明顯形參的構造函數。
  2. 提供了默認實參的構造函數。

 

類設計者可以自己寫一個默認構造函數。編譯器幫我們寫的默認構造函數,稱為“合成的默認構造函數”。

 

強調“沒有帶明顯形參”的原因是,編譯器總是會為我們的構造函數形參表插入一個隱含的this指針,所以”本質上”是沒有不帶形參的構造函數的,只有不帶明顯形參的構造函數,它就是默認構造函數。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM