shared_ptr<int> sp(new int(10));
assert(sp.unique());
shared_ptr<int> sp2(sp);
shared_ptr<int> sp3=sp;
shared_ptr<int> sp4(new int(5));
assert(sp==sp2 && sp.use_count()==3 );
*sp=100;
assert(*sp2==100 );
sp.reset(new int(6));
assert(sp3.use_count()==2);
assert(sp2.use_count()==2);
assert(sp.use_count()==1);
system("pause");
1 提供了* ,-> 模仿原始指针的行为
2提供隐式bool类型转换,判断指针的有效性
3 get()得到原始指针。Y *p
4 sharet_ptr多种构造函数:
1)shared_ptr():空指针
2)shared_ptr (Y *p):shared_ptr<int>(new int).引用计数置1
3)shared_ptr(shared_ptr const & r):shared_ptr sp1(sp).引用计数加1
4)shared_ptr(std::auto_ptr<Y> & r) 从一个auto_ptr获得指针管理权,引用计数置为1,同时auto_ptr自动失去管理权
5赋值构造:
shared_ptr<int> sp3=sp;
6关于reset()
Sp.reset();//非reset调用对象的引用计数减1.停止对指针与sp的共享,sp为空指针
sp.reset(new int(6));//原指针引用计数-1 管理新指针new int(6)