C 建構函式那些事

2022-09-05 17:06:20 字數 669 閱讀 6986

乙個類,在未定義任何建構函式的情況下,建立該類對應的物件實體時,編譯器會隱式的定義乙個預設的建構函式--合成的預設建構函式,其按照如下規則初始化類的資料成員:

然而,合成的預設建構函式只適合簡單的類。對於乙個普通的類來說,必須定義它自己的預設建構函式,原因有三:

第乙個原因是編譯器只有在發現類不包含任何建構函式的情況下才會替我們生成乙個合成的預設建構函式。一旦我們定義了一些其他的建構函式,那麼除非我們再定義乙個預設建構函式,否則類將沒有預設建構函式。這天規則的依據是,如果乙個類在某種情況下需要控制物件初始化,那麼該類可能在所有情況下都需要控制。

即:只有當類沒有宣告任何建構函式時,編譯器才會自動的生成預設的建構函式。

第二個原因是對於某些類來說,合成的預設建構函式可能執行錯誤的操作。如:定義在快內的內建型別或者復合型別(比如指標和陣列)的物件被預設初始化,則他們的值是未定義的。該準則同樣適用於預設初始化的內建型別成員。

第三個原因是有的時候編譯器不能為某些類合成預設的建構函式。例如,如果類中包含乙個其他類型別的成員這個成員的型別沒有預設建構函式,那麼編譯器將無法初始化該成員。對於這樣的類來說,我們必須自定義預設建構函式,否則該類將沒有可用的預設建構函式。

在c++11標準中,如果我們需要預設的行為,那麼可以通過在引數列表後面寫上=default來要求編譯器生成建構函式。

--《c++ primer 5th》

建構函式的那些事

建構函式 是一種特殊的方法,主要用來在建立物件時初始化物件,即為物件成員變數賦初始值。析構函式和建構函式相對應,它的功能是釋放物件的記憶體空間。為了便於分析和理解,部落格內容加入了析構函式,並且將初始化列表單獨拿出來分析。部落格結構 詳細內容如下 一 建構函式 1 建構函式是幹什麼的?當乙個類物件被...

談談建構函式的那些事

看過 c efficient 都應該明白以下幾點 1.最好有自己的拷貝建構函式 1.1 在函式引數為物件時,那麼在函式呼叫時,會呼叫拷貝構造生成乙個臨時物件 1.2 在函式返回值為乙個物件時,也會呼叫拷貝建構函式 1.3 拷貝建構函式一定要傳引用,如果穿乙個值,就會調拷貝構造,在乙個函式裡面,自己呼...

C 的那些事

面試總結一 1.sizeof的題 沒找到原題,找到乙個類似的如下 char str new char 100 sizeof str 答 在c c 裡陣列作為引數時傳遞的實際上是指向陣列第乙個元素的指標,因此sizeof str 返回的是指標的大小,即4。推薦於2016 11 04 03 14 03最...