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"; }