程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 實戰c++中的vector系列--vector(unique_ptr())初始化(所有權轉移)

實戰c++中的vector系列--vector(unique_ptr())初始化(所有權轉移)

編輯:C++入門知識

實戰c++中的vector系列--vector(unique_ptr())初始化(所有權轉移)


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

那麼如果把unique_ptr作為vector容器的元素呢?

形式如出一轍:vector > vec;

但是怎麼給vec添加元素呢?

看下面:

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

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

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

這就是unique智能指針的所有權問題,這個時候就需要使用std::move:

#include
#include
#include 
using namespace std;
int main()
{
    vector> vec;
    unique_ptr 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已經釋放,所有權轉移了!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved