但我們定義乙個類時,我們隱式或者顯式的指定此型別物件的拷貝、移動、賦值和銷毀時做什麼。
具體就是通過五種特殊的建構函式,包括:拷貝建構函式、拷貝賦值運算子、移動建構函式、移動賦值運算子,析構函式。
關於直接初始化和拷貝初始化
當使用直接初始化,我們是實際上是要求編譯器使用普通的函式匹配來選擇與我們提供的引數最匹配的建構函式,當然包括拷貝建構函式。
拷貝初始化是指用=定義變數,以及
1.將乙個物件作為實參傳遞給乙個非引用型別的形參
2.從乙個返回型別為非引用型別的函式返回乙個物件
3.用花括號列表初始化乙個陣列中的元素或乙個聚合類(所有成員public,沒有定義建構函式,沒有類累初始值,沒有基類)的成員
大多數時候使用拷貝建構函式,此時初始化的右值常常需要轉換建構函式進行隱式型別轉換;
如
string book =
"9999"
;
實際上
string book =
string
("9999"
);
拷貝賦值運算子
析構函式
對於乙個給定類,只會有唯一乙個析構函式。
如果乙個類需要乙個析構函式,我們可以肯定,他也需要乙個拷貝建構函式和乙個拷貝賦值運算子
需要建構函式意味著需要在其中釋放動態分配的記憶體,如果不自己定義拷貝建構函式和拷貝賦值運算子,在同類賦值運算時,會出現多個指標指向同一片記憶體的情況。
///c++primer學習總結
c 類的拷貝控制
當定義乙個類時,我們顯式地或隱式地指定在此型別的物件拷貝 移動 賦值和銷毀時做什麼。乙個類通過定義五種特殊的成員函式來控制這些操作。包括 拷貝建構函式 拷貝賦值運算子 移動建構函式 移動賦值運算子和析構函式。拷貝和移動建構函式定義了當用同型別的另乙個物件初始化本物件時做什麼。拷貝和移動賦值運算子定義...
c 筆記 類型別拷貝控制
乙個類通過定義五種特殊的成員函式來控制物件的拷貝,移動,賦值和銷毀操作,分別是拷貝建構函式 拷貝賦值建構函式 移動建構函式 移動賦值運算子和析構函式。拷貝和移動建構函式定義了當同型別的另乙個物件初始化本物件時,做什麼操作 拷貝和移動賦值運算子定義了乙個物件賦值給同型別的另乙個物件時,做什麼操作 析構...
C 13章 類的拷貝控制
拷貝控制操作 定義類的時候,顯示或隱式指定了在此型別物件拷貝,移動,賦值和銷毀時做了什麼。拷貝建構函式和移動建構函式定義了當同型別的另乙個物件初始化本物件做了什麼。移動和拷貝賦值運算子定義了當同型別的另乙個物件賦予給本物件做了什麼。析構函式定義此型別物件銷毀做了什麼。如果乙個類沒有定義所有這些拷貝控...