c++11 std::move() 的使用


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM