shared_ptr的作用有如同指针,但会记录有多少个shared_ptrs共同指向一个对象。这便是所谓的引用计数(reference counting)。一旦最后一个这样的指针被销毁,也就是一旦某个对象的引用计数变为0,这个对象会被自动删除。
#include <memory>
#include <iostream>
using namespace std;
int main()
{
auto sp1=make_shared<int>(5);
cout<<"sp1.unique()=="<<boolalpha<<sp1.unique()<<endl;//unique返回指针的引用计数
shared_ptr<int> sp2=sp1;
cout<<"sp1.unique() == "<<boolalpha<<sp1.unique()<<endl;
cout<<"sp1.use_count():"<<sp1.use_count()<<endl;//use_count返回该指针的引用计数
cout<<"sp2.use_count():"<<sp2.use_count()<<endl;
cout<<"sp1.get(): "<<sp1.get()<<endl;
cout<<"sp2.get(): "<<sp2.get()<<endl;
sp1.reset();//reset清除指针的引用计数
cout<<"sp1.use_count(): "<<sp1.use_count()<<endl;
cout<<"sp2.use_count(): "<<sp2.use_count()<<endl;
shared_ptr<int> sp3(new int(10));
cout<<*sp2<<endl;
cout<<*sp3<<endl;
sp2.swap(sp3);
cout<<*sp2<<endl;
cout<<*sp3<<endl;
system("pause");
return 0;
}