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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

智能指针shared_ptr的几个例子

發布時間:2024/4/18 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 智能指针shared_ptr的几个例子 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#include <string> #include <iostream> #include <memory> //智能指針定義在頭文件memory中,例如shared_ptr,unique_ptr,weak_ptr三個 //再比如make_shared也定義在頭文件memory中 using namespace std; int main() { //用make_shared定義shared_ptr,類型是int shared_ptr<int> p3 = make_shared<int>(42); cout << *p3 <<endl; //p3.get()返回智能指針p3中的指針。要小心使用,如果p3已經被釋放,那么返回的指針所指向的對象也消失了 cout << p3.get() <<endl; //如果p3的use_count為1,那么p3.unique()返回1 cout << p3.unique()<< endl; //返回與P3共享對象的指針數量 cout << p3.use_count() << endl;//定義一個只能指針,指向對象9999999999 shared_ptr<string> p4=make_shared<string>(10,'9'); cout << *p4 <<endl; //p5指向一個值初始化的int,即,值0 shared_ptr<int> p5 = make_shared<int>(); cout << *p5 << endl; //p6指向一個值初始化的string,即"" shared_ptr<string> p6 = make_shared<string>();if(*p6 == "")cout << "yes,value initialized..." << endl; if(p5)cout << "empty" << endl; //用auto定義一個智能指針最簡單auto p7 = make_shared<vector<string>>(); if(p6->empty())cout << "ues" << endl;//定義p是一個shared_ptr shared_ptr<string> p = make_shared<string>("Hello,world!");//shared_ptr的賦值和拷貝 //定義q是p的拷貝 shared_ptr<string> q(p); cout << *q << endl; shared_ptr<string> r = make_shared<string>("you are welcome"); //給r賦值,令它得到一個地址 //遞增q指向的對象的引用計數 //遞減r指向的對象的引用計數 //r原來指向的對象已沒有引用者,會自動釋放 r = q; //注:在此例中,r是唯一指向此string的shared_ptr,在把q賦值給它的過程中,此string會被自動釋放return 0; } ~ ~ ~

下面看看智能指針shared_ptr“在多個數據對象之間共享數據”的一個例子:

#include <string> #include <iostream> #include <memory> #include <vector> using namespace std; class Blob{public:Blob() = default;Blob(initializer_list<string> l1):data(make_shared<vector<string>>(l1)){}shared_ptr<vector<string>> data; }; int main() { //定一個一個Blob對象Blob b1({"sss1","sss2","sss3"});{//塊內定義b2Blob b2 = b1;for(const auto &i : *b1.data)cout << i << endl;//在塊內的b2中添加一個元素 (b2.data)->push_back("sss4");}//b1是一個臨時對象,已經被銷毀,但是b1和b2是共享對象的,所以b1(b2)的共享對象沒有銷毀 //打印b1的元素 for(const auto & i : *b1.data)cout << i << endl;return 0; }

運行結果是

sss1 sss2 sss3 sss1 sss2 sss3 sss4

總結:在整個過程中,我們從定義b1后再沒有往里面添加數據,為何第二次打印會多一個呢?因為b2添加過數據,b1和b2是共享數據對象的,所以b1在塊內添加數據的時候,b2也多了一個。神奇。

總結

以上是生活随笔為你收集整理的智能指针shared_ptr的几个例子的全部內容,希望文章能夠幫你解決所遇到的問題。

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