日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

实战c++中的vector系列--vectorlt;unique_ptrlt;gt;gt;初始化(全部权转移)

發布時間:2025/7/14 c/c++ 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 实战c++中的vector系列--vectorlt;unique_ptrlt;gt;gt;初始化(全部权转移) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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已經釋放,全部權轉移了!

轉載于:https://www.cnblogs.com/lytwajue/p/7398748.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的实战c++中的vector系列--vectorlt;unique_ptrlt;gt;gt;初始化(全部权转移)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。