上一篇文章中,通過用移動string對象代替拷貝string對象,大大提高了程式的運作速度。其實對于我們自己寫的類也可以适用同樣的方式,前提是這些類實作了移動構造函數和移動指派運算符。
移動構造函數
首先看通常的拷貝構造函數:
拷貝構造函數中實作了深拷貝處理。再看移動構造函數:
代碼構造和拷貝構造函數類似,但是記憶體的處理不是拷貝而是轉移。注意參數類型是右值引用。
移動指派運算符
指派運算符的情況和構造函數類似,還是先考察普通的指派運算符:
再看移動指派運算符:
套路和普通的指派預算符相似,同樣是記憶體移動而不是拷貝。注意參數類型是右值引用。
使用執行個體
和昨天同樣的測試思路,同樣的結果。使用移動方式操作時速度會大符提高。
例外
如果不定義移動構造函數而使用時,會出現錯誤
如果不定義移動指派運算符而使用時,雖然沒有編譯錯誤,但是可能會出現問題(本例中會發生記憶體管理混亂)
作者的一句話
這麼好的機制,如果不利用的話就浪費了。