C 隨筆之物件移動

2021-08-11 05:33:04 字數 1281 閱讀 6880

右值引用:必須繫結到右值的引用,右值引用只能繫結到乙個將要銷毀的物件上。

左值表示式表示乙個物件右值表示式表示乙個物件的

左值表示式:返回左值引用的函式、連同賦值、下標、解引用、前++/–

右值表示式:連同算術、關係、位、後++/–運算

右值引用的所有物件將會被銷毀,該物件沒有其它使用者

移動建構函式和移動賦值運算子

這兩個函式的引數必須是乙個右值引用

必須保證移後的源物件銷毀它無害(指標成員指向nullptr)

移動建構函式不分配任何新記憶體,接管被移動物件中的記憶體

noexcept(不拋異常):標準庫能對異常發生時期自身的行為提供保障(如:vector.push_back發生異常,vecotr本身不會發生變化)

必須在內的標頭檔案的宣告中和定義中都指定noexcept

編譯也會合成移動建構函式和移動賦值運算子

如果定義了拷貝構造、賦值運算子或析構函式 ,編譯器不再合成

類中沒有定義任何自己的拷貝成員,具每個資料成員都可以移動時才會生成合成函式

合成移動操作函式被隱式定義為=delete的情況

1.移動操作函式被定義為=default,但又不能移動所有成員

2.類中某個成員不能被移動

即有拷貝構造又有移動構造,使用普通函式匹配規則確定呼叫哪個函式

如果 沒有移動建構函式,右值std::move(object), object&& 也會被轉換成const boject&被拷貝。

如: object o = std::move(object);

不需要為函式操作定義接收乙個const x&& 或 x&的引數版本。因為移動構造/賦值一般都要改變x,而拷貝一般都不會改x

函式引數列表後加引用限定符指定this的左、右值屬性

&this是左值

&&this是右值

有多個相同名字和引數列表的成員函式加引用限定符必須同時都加或都不加

C 隨筆之 拷貝控制

拷貝建構函式 第乙個引數必須是引用型別。原因 如果引數不是引用型別 在呼叫拷貝建構函式時,一定會拷貝它的實參,如果要拷貝實參就必定會呼叫它的拷貝構造。那就會這樣無限迴圈下去。拷貝構造函式呼叫的時期 1.用 定義變數 2.將乙個物件作為實參傳遞給乙個非引用型別的形參 3.從乙個返回值型別為非引用型別的...

物件隨筆(一)

建立物件的幾種方式 字面值式 工廠模式 構造模式 原型模式 混合模式 lang en charset utf 8 titletitle head for txtlength 長label type text id txtlength div for txtwidth 寬label type text...

移動增值業務隨筆(2)

無線上網業務是指把手機當作數據機或直接使用無線上網絡卡的網際網路接入業務。無論是cdma 1x 還是gprs 二者的優點均體現在高速無線資料傳輸方面。那麼到底 gprs 和cdma 1x gprs 或cdma 解決方案,通過膝上型電腦上網進行實際使用測試。測試環境是在乙個電腦和手機眾多,有一定干擾的...