std::move函數(shù)可以以非常簡單的方式將左值引用轉(zhuǎn)換為右值引用。
通過std::move,可以避免不必要的拷貝操作。
std::move是為性能而生。
std::move是將對象的狀態(tài)或者所有權(quán)從一個對象轉(zhuǎn)移到另一個對象,只是轉(zhuǎn)移,沒有內(nèi)存的搬遷或者內(nèi)存拷貝。
如string類在賦值或者拷貝構(gòu)造函數(shù)中會聲明char數(shù)組來存放數(shù)據(jù),然后把原string中的 char 數(shù)組被析構(gòu)函數(shù)釋放,如果a是一個臨時變量,則上面的拷貝,析構(gòu)就是多余的,完全可以把臨時變量a中的數(shù)據(jù)直接 “轉(zhuǎn)移” 到新的變量下面即可。
std::string str = "Hello";
std::vector<std::string> v;
//調(diào)用常規(guī)的拷貝構(gòu)造函數(shù),新建字符數(shù)組,拷貝數(shù)據(jù)
v.push_back(str);
//調(diào)用移動構(gòu)造函數(shù),掏空str,掏空后,最好不要使用str
v.push_back(std::move(str));
在隊里中
value = std::move(queue.front());
queue.pop() 以此來減少析構(gòu)拷貝地時間。