#include <iostream>
#include <memory>
using namespace std;
class A
{
public:
A()
{
cout << "A Constructor" << endl;
}
~A()
{
cout << "A Destruct" << endl;
}
};
int fun(shared_ptr<A>p)
{
cout<<"fun count:"<<p.use_count()<<endl;
return 0;
}
int main()
{
shared_ptr<A> p = make_shared<A>();
cout << "count:"<<p.use_count() << endl;
fun(p);
cout << "count:"<<p.use_count() << endl;
return 0;
}
智能指针本身是一个类,当出了类的作用域的时候,类会调用析构函数进行释放资源;
比如这里
shared_ptr<A> p = make_shared<A>();
引用了一次类A,这里的作用域是 int main()函数。
fun(p);
第二次引用类A,此时,引用第二次类A的作用域在fun()函数中,当fun()函数执行完 return 0;之后引用类A的次数减少为1,当int main()函数执行完return 0;之后,此时引用类A的次数减少为0,引用为0后,类会调用析构函数释放资源。
参考链接