c++ 新特性 右值引用

<1>普通左右值引用

int a = 0;

int&ref1 = a; //左值引用

int&&ref2 = a; //右值引用

<2>右值和左值引用基本沒什麼區別,差別是右值引用可以綁定到一個臨時對象(右值)上,如:

int&x = int();//編譯錯誤

Int&&y = int();

<3>通過右值引用,程序可以明確的區分出傳入的參數是否爲右值,從而避免了不必要的拷貝,程序的效率也就得到了提高

(1)普通交換數據:

template<class T> void swap(T& a, T& b)

{

T temp(a);//temp對象創建後有a的兩份拷貝

a = b;//b的值也有兩份,a一份

b = temp;//a現在也有兩份拷貝,b有一份

}

在對象比較大時,比較影響效率

(2)右值應用:

template<class T> T&& move(T&& x)

{

return x;

}

//這一過程不會產生拷貝操作

template<class T> void swap(T& a, T& b)

{

T temp(move(a));//對象a被移到temp中,a被清空

a = move(b);//對象b被移到a中,b被清空

b = move(temp);//對象temp被移到b中,temp被清空

}

<4>不要返回函數內部new分配的內存的引用雖然不存在局部變量的被動銷燬問題又面臨其它尷尬局面函數返回的引用只是作爲一個臨時變量出現,而沒有被賦予一個實際的變量,那麼這個引用所指向的空間(由new分配)就無法釋放,造成memory leak

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章