C++ Primer Chapter 13-5

1:我們可以用一個賦值運算符實現移動 和 拷貝賦值(前提是定義移動構造函數)
  1. foo & =operator(foo rhs)
在這裏,如果 = 運算符右側對象是左值,那麼由於會向 rhs 傳遞對象,那麼會調用拷貝構造函數構造 rhs ,如果右側對象是右值,那麼會調用移動構造函數。

2:一當一個類定義任何一個拷貝操作,就應該定義所有五個操作(拷貝構造,拷貝賦值,移動構造,移動賦值,析構)

3:在調用
  1. std:move(value)
之後,value 的值是未定義的,但是卻又是有效的,爲了保障程序不出問題,我們必須保證 執行該函數後,value 不能被訪問(取值)。

4:移動迭代器
  1. iter1 = make_move_iterator(iter)
利用這個函數可以把一個迭代器改成移動迭代器,就是把 iter 指向的內存元素變成可以移動的,對 iter1 解引用就可以得到類似 move(value)的操作。可以移動 *iter1 元素。但是我們必須保證移動後,我們不能訪問 *iter ,因爲原來元素移動後值未定義,但卻是有效的,如果訪問會使得程序出問題

5:建議不要隨便使用移動操作,因爲有一個移動後的元素他的狀態具有不確定性,調用 std::move 一定要保證移動後的源不能被訪問

6:const T &  T &&
一般成員函數參數 const T & ,一般爲左值,爲了保證複製對象安全性,不用 T &,參數類型時 T &&  ,參數一般是右值引用,一般是爲了竊取數據,是需要修改竊取後的數據的,不用 const T &&。

7:左值和右值引用成員函數
我們可以像 用 const 一樣來用 & 和 && 來修飾一個 this 指針可以指向一個左值或者右值引用限定符只能用於非 static 成員函數,引用限定符可以和 const 一起用,但是必須在 const 後面

8:用 & 修飾函數只能用於左值, && 修飾函數只能用於右值

9:引用限定符也是可以像 const 一樣,可以區分重載函數有無引用限定符是可以區分函數的類型。但是類似於成員函數參數的 const T& 和 T&& 一樣,類型限定符可以爲 const & 和 && ,前面一種可以用於任何對象後面一種只可以用於右值類型

10:如果一個類中有兩個或者以上名字、參數、都相同的成員函數,那麼這些函數中只要有一個函數有引用限定符說明,那麼所有其他同名同參數的函數要有,對於同名但是不同參數的則沒有該要求

11:foo(*this) 是一種 無主 的右值foo 是類名
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章