C 11 右值引用(2)移動構造和移動賦值函式

2021-08-31 00:01:04 字數 816 閱讀 6048

先參考上一節 c++11 右值引用(1),本節是右值引用的第乙個用途:減少拷貝,減低開銷,提高效率。

c++11的右值引用概念出來後,c++類的預設函式多了兩個,移動構造和移動賦值函式。(之前的所有預設函式為:構造、析構、拷貝構造、拷貝賦值、取址、取址const)。

下面是乙個簡單例子。

class mystring

mystring(char* data, int length)

mystring(const mystring& str)

mystring& operator=(const mystring& str)

cout << "copy assignment " << endl;

return *this;

}~mystring()

cout << "destructor" << endl;

}// 移動構造

mystring(mystring&& str)

// 移動賦值

mystring& operator=(mystring&& str)

cout << "move assignment " << endl;

return *this;

}private:

char* data_;

int length_;

};

注意

在c++11中,拷貝構造/賦值 和 移動構造/賦值 必須同時提供或者同時不提供,程式設計師才能保證類同時具有拷貝和移動語義,只宣告一種的話,類僅能實現一種語義。

移動語義和右值引用(C 11)

左值 可以取位址 有名字的 右值 不能取位址 沒名字的 傳統的c 引用稱為左值引用,使得標誌符關聯到左值。c 11新增了右值引用,使用 表示。引入右值引用的主要目的之一是實現移動語義。在複製物件時,實現物件的移動而非拷貝。通過移動建構函式 移動賦值運算子實現 函式的引數為右值引用,函式內部並非深度複...

C 11 右值引用和移動語義

因為工作室要求寫技術部落格記錄學習到的知識點,自己之前是沒有寫過部落格的,所以現在用一篇介紹右值引用和移動語義的部落格作為部落格的第一篇,可能對於移動語義的理解還不夠深刻,但可以作為乙個簡單的介紹部落格 要理解好右值引用首先要知道什麼是左值?什麼是右值?1.左值是表示式結束後依然存在的持久化物件 2...

C 11新特性 移動語義和右值引用

傳統的c 引用 左值引用 使得識別符號關聯到左值。左值是乙個表示資料的表示式 如變數名或解除引用的指標 程式可以獲得其位址。c 11新增了右值引用。右值引用,顧名思義,可以關聯到右值,即 可以出現在賦值表示式的右邊,但不能對其應用位址運算子的值。右值包括字面常量 c風格字串除外,它表示位址 諸如x ...