shared_ptr
主要如下:
(1)创建出来后,在生命周期结束后自动释放并调用对象的析构函数。
(2)理解shared的意义,多个智能指针可以共享一个对象,其体现在shared_ptr的use_count()计数上,每多一个智能指针,计数就加1,每结束一个智能指针则减1,只有当use_count()为0时这个指针指向空间才会真正释放
#include<iostream>
using namespace std;
class aa
{
public:
aa() { printf("创建aa对象\n"); }
~aa(){ printf("析构aa对象\n"); }
public:
int num = 0;
char l;
};
shared_ptr<aa> fun(shared_ptr<aa> c)
{
printf("c->,use_count=%d\n", c.use_count()); //计数为2
c->num++;
return c; //生命周期结束use_count自动减1
}
int main()
{
shared_ptr<aa> a;
{
shared_ptr<aa> a1 = make_shared<aa>();
printf("a1->use_count=%d\n", a1.use_count()); //a1计数为1
shared_ptr<aa> a2 = fun(a1);
printf("a2->use_count=%d\n", a2.use_count()); //a2计数为2
a = a1;
printf("a->use_count=%d\n", a.use_count()); //a计数为3
printf("a1->use_count=%d\n", a1.use_count()); //a1计数为3,所有指针共享计数
printf("a1,a2生命周期结束\n"); //此时并不会调用析构函数,还有a指针
}
printf("a->use_count=%d\n", a.use_count());
printf("a结束生命周期\n"); //此时调用析构函数
return 0;
}