1.=default 顯式要求編譯器生成合成版本;=delete 定義為刪除的函式阻止拷貝。
2.右值引用只能繫結到將要銷毀的物件;std::move 獲得繫結到左值上的右值引用
移動建構函式的第乙個引數應該是該型別的右值引用,移動操作不應丟擲異常,可以指明noexcept承諾。標準庫容器能對異常發生時其自身行為提供保障。例如,vector的push_back可能需要移動元素。當vector知道元素的移動建構函式不會丟擲異常,就可以使用。否則只能使用拷貝建構函式。
當乙個類同時有拷貝和移動建構函式,編譯器使用普通的函式匹配規則,移動右值,拷貝左值;當只有拷貝建構函式,則通過拷貝建構函式來「移動」
make_move_iterator將普通迭代器轉換成移動迭代器,移動迭代器解引用生成右值引用
有時我們希望強制左側運算物件是個左值,可以在成員函式引數列表後放置乙個引用限定符&或&&;引用限定符也可以區分過載版本;如果定義兩個或以上相同名字和引數列表的成員函式,就必須所有函式都加引用限定符,或都不加
C primer學習 拷貝控制 1
1 我們使用 定義變數 2 從乙個返回型別為非引用的函式返回物件 3 用花括號列表初始化乙個陣列中的元素或者乙個聚合類的成員.4 某些類型別對它們所分配的物件使用拷貝初始化.point global point foo bar point arg 第1處 第4,5初 return heap 第6處 ...
C primer學習 拷貝控制 3
strblob const strblob rhs 拷貝初始化 strblob operator const strblob rhs 練習 定義乙個使用引用計數的hasptr類class hasptr 在拷貝建構函式中定義三個成員,並且初始化引用計數為1 hasptr const hasptr h ...
C Primer學習筆記 13 拷貝控制
題記 本系列學習筆記 c primer學習筆記 主要目的是討論一些容易被大家忽略或者容易形成錯誤認識的內容。只適合於有了一定的c 基礎的讀者 至少學完一本c 教程 如果文中有錯誤或遺漏之處,敬請指出,謝謝!c 類中有四個不可或缺的部分,那就是建構函式 拷貝建構函式 賦值操作符和析構函式。如果類中沒有...