C++
- 移動建構式和移動賦值運算子、
- 主要解決程式書寫時效率問題、
- 移動并非是將記憶體中的資料移動到另一個地址中去、而是只是改變資料的所有者、
- 拷貝建構式是左值參考即一個 & 而移動建構式是右值參考即 &&
- 移動建構式和移動賦值函式應在移動后切斷原物件和記憶體的關系、確保移動后原物件內容即使被銷毀也不影響移動后的資料即 a移動到b 移動后 將a的內容銷毀而b則不會受到任何影響、
- 移動建構式、
- noexcept——作用是通知標準庫、在使用noexcept的移動建構式中不拋出例外、
- 目的是提高作業效率、只要是移動建構式(和移動賦值運算子)均建議加上noexcept、
- 合成的移動操作、
- 有自己的拷貝建構式、賦值運算子和解構式編譯器就不會自動合成移動建構式和移動賦值運算子、
- 系統只能合成簡單的移動建構式和移動賦值運算子、
- 沒有自己的移動建構式和移動建構式的話、系統會呼叫我們自己的拷貝函式和拷貝賦值運算子替代、
- 只有一個類沒有定義任何自己版本的拷貝建構式成員、且類的每個非靜態成員都可以移動時、編譯器才會生成移動建構式和移動賦值運算子、
- 可移動成員、
- 內置型別(整型、實性)可以移動、
- 型別別成員的話就需要移動操作相關的函式、便可以移動、
- 總結、
- 盡量使用移動建構式和移動賦值運算子來替代拷貝函式和拷貝賦值符、
- 不拋出例外的移動函式和移動賦值符加上noexcept——能加則加、
- 被移動物件在移動完成后要指空(NULLPTR)、以便讓被移動物件處于一種能被析構的狀態、
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/182710.html
標籤:C++
