當定義乙個類時,我們顯式地或隱式地指定在此型別的物件拷貝、移動、賦值和銷毀時做什麼。乙個類通過定義五種特殊的成員函式來控制這些操作。包括:拷貝建構函式、拷貝賦值運算子、移動建構函式、移動賦值運算子和析構函式。拷貝和移動建構函式定義了當用同型別的另乙個物件初始化本物件時做什麼。拷貝和移動賦值運算子定義了將乙個物件賦予同型別的另乙個物件時做什麼。析構函式定義了當此型別物件銷毀時做什麼。我們稱這些操作為拷貝控制操作。
在定義任何c++類時,拷貝控制操作都是必要部分。對初學c++的程式設計師來說,必須定義物件拷貝、移動、賦值或銷毀時做什麼,這常常令他們感到困惑。這種困擾很複雜,如果我們不顯式的定義這些操作,編譯器也會為我們定義,但編譯器定義的版本的行為可能並非我們所想。
拷貝、賦值與銷毀
拷貝建構函式、拷貝賦值運算子和析構函式
拷貝控制和資源管理
確定型別物件的拷貝語義。定義拷貝操作使類的行為看起來像乙個值或者像乙個指標。
交換操作
除了定義拷貝控制成員,管理資源的類通常還定義乙個名為swap的函式。對於那些與重排元素順序的演算法一起使用的類,定義swap是非常重要的。如果乙個類定義了自己的swap,那麼演算法將使用類自定義版本。否則,演算法將使用標準庫定義的swap。為了交換2個物件我們需要進行一次拷貝和兩次賦值。
動態記憶體管理類
某些類需要在執行時分配可變大小的記憶體空間。這種類通常可以使用標準庫容器來儲存他們的資料。某些類需要自己進行記憶體分配。這些類一般來說必須定義自己的拷貝控制成員來管理所分配的記憶體。
物件移動
新標準的乙個最主要的特性是可以移動而非拷貝物件的能力。某些情況下,物件拷貝後就立即被銷毀了,這時,移動而非拷貝物件會大幅度提公升效能。
3 11 C 類的拷貝控制
但我們定義乙個類時,我們隱式或者顯式的指定此型別物件的拷貝 移動 賦值和銷毀時做什麼。具體就是通過五種特殊的建構函式,包括 拷貝建構函式 拷貝賦值運算子 移動建構函式 移動賦值運算子,析構函式。關於直接初始化和拷貝初始化 當使用直接初始化,我們是實際上是要求編譯器使用普通的函式匹配來選擇與我們提供的...
c 筆記 類型別拷貝控制
乙個類通過定義五種特殊的成員函式來控制物件的拷貝,移動,賦值和銷毀操作,分別是拷貝建構函式 拷貝賦值建構函式 移動建構函式 移動賦值運算子和析構函式。拷貝和移動建構函式定義了當同型別的另乙個物件初始化本物件時,做什麼操作 拷貝和移動賦值運算子定義了乙個物件賦值給同型別的另乙個物件時,做什麼操作 析構...
C 13章 類的拷貝控制
拷貝控制操作 定義類的時候,顯示或隱式指定了在此型別物件拷貝,移動,賦值和銷毀時做了什麼。拷貝建構函式和移動建構函式定義了當同型別的另乙個物件初始化本物件做了什麼。移動和拷貝賦值運算子定義了當同型別的另乙個物件賦予給本物件做了什麼。析構函式定義此型別物件銷毀做了什麼。如果乙個類沒有定義所有這些拷貝控...