智能指针shared_ptr的几个例子
生活随笔
收集整理的這篇文章主要介紹了
智能指针shared_ptr的几个例子
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
#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已經(jīng)被釋放,那么返回的指針所指向的對象也消失了
cout << p3.get() <<endl;
//如果p3的use_count為1,那么p3.unique()返回1
cout << p3.unique()<< endl;
//返回與P3共享對象的指針數(shù)量
cout << p3.use_count() << endl;//定義一個只能指針,指向?qū)ο?999999999
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指向的對象的引用計數(shù)
//遞減r指向的對象的引用計數(shù)
//r原來指向的對象已沒有引用者,會自動釋放
r = q;
//注:在此例中,r是唯一指向此string的shared_ptr,在把q賦值給它的過程中,此string會被自動釋放return 0;
}
~
~
~
下面看看智能指針shared_ptr“在多個數(shù)據(jù)對象之間共享數(shù)據(jù)”的一個例子:
#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"});{//塊內(nèi)定義b2Blob b2 = b1;for(const auto &i : *b1.data)cout << i << endl;//在塊內(nèi)的b2中添加一個元素 (b2.data)->push_back("sss4");}//b1是一個臨時對象,已經(jīng)被銷毀,但是b1和b2是共享對象的,所以b1(b2)的共享對象沒有銷毀 //打印b1的元素 for(const auto & i : *b1.data)cout << i << endl;return 0; }運行結(jié)果是
sss1 sss2 sss3 sss1 sss2 sss3 sss4總結(jié):在整個過程中,我們從定義b1后再沒有往里面添加數(shù)據(jù),為何第二次打印會多一個呢?因為b2添加過數(shù)據(jù),b1和b2是共享數(shù)據(jù)對象的,所以b1在塊內(nèi)添加數(shù)據(jù)的時候,b2也多了一個。神奇。
總結(jié)
以上是生活随笔為你收集整理的智能指针shared_ptr的几个例子的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python3 注释
- 下一篇: python3 pygame的发射子弹自