實戰c++中的vector系列--vector >初始化(全部權轉移)


C++11為我們提供了智能指針,給我們帶來了非常多便利的地方。

那么假設把unique_ptr作為vector容器的元素呢?

形式如出一轍:vector<unique_ptr<int> > vec;

可是怎么給vec加入元素呢?

看以下:

#include<iostream>
#include<vector>
#include <memory>
using namespace std;
int main()
{
    vector<unique_ptr<int>> vec;
    vec.push_back(1);//錯誤
    return 0;
}

那么先定義一個unique_ptr,再進行push_back():

#include<iostream>
#include<vector>
#include <memory>
using namespace std;
int main()
{
    vector<unique_ptr<int>> vec;
    unique_ptr<int> sp(new int(126));
    vec.push_back(sp);//嘗試引用已刪除的函數
    return 0;
}

這就是unique智能指針的全部權問題。這個時候就須要使用std::move:

#include<iostream>
#include<vector>
#include <memory>
using namespace std;
int main()
{
    vector<unique_ptr<int>> vec;
    unique_ptr<int> sp(new int(126));

    //vec.push_back(1);

    vec.push_back(std::move(sp));//嘗試引用已刪除的函數
    cout << *vec[0]<< endl;  // 輸出126
    //cout << *sp << endl;
    return 0;
}

可是此時,上面代碼的sp編程了什么呢? 使用*取值看一下,結果程序崩潰,原因何在?
就是此時sp已經釋放,全部權轉移了!


免責聲明!

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



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