談談建構函式的那些事

2021-06-16 10:37:44 字數 865 閱讀 1078

看過《c++efficient》,都應該明白以下幾點

1.最好有自己的拷貝建構函式

1.1:在函式引數為物件時,那麼在函式呼叫時,會呼叫拷貝構造生成乙個臨時物件

1.2 :在函式返回值為乙個物件時,也會呼叫拷貝建構函式

1.3:拷貝建構函式一定要傳引用,如果穿乙個值,就會調拷貝構造,在乙個函式裡面,自己呼叫自己,就會導致棧溢位。(補充)

1.4:拷貝建構函式最好過載乙個傳 const 引用。(補充)至於為什麼,我們先看看下面這個例子

class a

public:

a(a &_a):a(_a.a)

a(int _a = -1):a(_a)

int a;

a operator+ (const a& a1,const a&a2)

return (a1.a + a2.a);

int main(void)

a a1(1),a2(2);

a a3 ( a1 + a2);

return 1;

大家不妨試試,這樣會報錯,如果我們把拷貝建構函式裡面a &_a,換成const a &_a,就ok了。我先分析一下,operator+ 返回乙個臨時物件(也就是乙個右值),我們用乙個臨時值去初始化拷貝乙個物件,這在c++裡面是有規定的,如果用乙個如果用乙個右值作為乙個引用引數的實參,那麼,這個引用引數就必須要寫成const,才行。記住,這裡是一種情況,而不是教大家只要是拷貝構造,引數就一定是const引用,有些時候,我們會把傳進來的物件裡資源釋放掉(比如說,智慧型指標),所以這種情況,堅決不能用const,所以大家要分清情況採用。

2.在建構函式裡面,成員屬性最好用初始化,而不去賦值(構造物件時,是首先初始化成員屬性,之後再呼叫建構函式,上面的寫法就是初始化的做法)

建構函式的那些事

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

C 建構函式那些事

乙個類,在未定義任何建構函式的情況下,建立該類對應的物件實體時,編譯器會隱式的定義乙個預設的建構函式 合成的預設建構函式,其按照如下規則初始化類的資料成員 然而,合成的預設建構函式只適合簡單的類。對於乙個普通的類來說,必須定義它自己的預設建構函式,原因有三 第乙個原因是編譯器只有在發現類不包含任何建...

談談敏捷那些事

從h3c實習開始到現在差不多有六年多,這六年裡,經歷專案越來越多,對與軟體開發流程的思索也越來越多。不同的公司,不同的專案,不同的管理方式,各顯優劣,一時之間也很難去評價。評價雖難,但想法是有的,好吧,我決定將這些想法記錄下來。想法的開端就是敏捷模式。軟體模式評判之我見 第一次聽說敏捷這個詞,感覺就...