std::move函數可以以非常簡單的方式將左值引用轉換為右值引用。(左值、左值引用、右值、右值引用 參見:http://www.cnblogs.com/SZxiaochun/p/8017475.html)
通過std::move,可以避免不必要的拷貝操作。
std::move是為性能而生。
std::move是將對象的狀態或者所有權從一個對象轉移到另一個對象,只是轉移,沒有內存的搬遷或者內存拷貝。
如string類在賦值或者拷貝構造函數中會聲明char數組來存放數據,然后把原string中的 char 數組被析構函數釋放,如果a是一個臨時變量,則上面的拷貝,析構就是多余的,完全可以把臨時變量a中的數據直接 “轉移” 到新的變量下面即可。
#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,掏空后,最好不要使用str
v.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";
}
