40.move()
右值引用只能綁定到臨時對象:
1)所引用的對象將會被銷毀。當我們對一個左值用move轉換為右值引用之后,這個左值就像是被掏空了,只能夠被賦值或者銷毀,不能做其他的操作!
2)該對象沒有其他的用戶共享。
std::move 可以以非常簡單的方式將左值引用轉換為右值引用。
std::move本質上是提高性能,減少不必要的拷貝操作,能移動就不拷貝!
std::move 將一個對象的狀態或者所有權轉移到另外一個對象上。
打個比方,你有5塊錢,你弟沒有錢,你弟想找你媽媽要5塊錢。你媽媽不打算給,因為這樣又沒了5塊(消耗大)。你媽于是直接將你的5塊給了你弟。此時,你就沒有錢了。你弟有錢。就是這個道理。
#include <iostream>#include <utility>#include <vector>#include <string>int main(){std::string str = "Hello";std::vector<std::string> v;//調用常規的拷貝構造函數,新建字符數組,拷貝數據v.push_back(str);std::cout << "After copy, str is \"" << str << "\"\n";//調用移動構造函數,掏空str,掏空后,最好不要使用strv.push_back(std::move(str));std::cout << "After move, str is \"" << str << "\"\n";std::cout << "The contents of the vector are \"" << v[0]<< "\", \"" << v[1] << "\"\n";system("pause");return 0;}
輸出:
After copy, str is "Hello" After move, str is "" The contents of the vector are "Hello", "Hello"?
總結
- 上一篇: 39.左值、左值引用、右值、右值引用
- 下一篇: Nginx:安装+测试