shared_ptr

1、方便资源的管理,自动释放没有指针引用的资源。
2、使用引用计数来标识是否有多余指针指向该资源。(shart_ptr本身指针会占1个引用)
3、在赋值操作中, 原来资源的引用计数会减一,新指向的资源引用计数会加一。
  std::shared_ptr<Test> p1(new Test);
  std::shared_ptr<Test> p2(new Test);
  p1 = p2;
4、引用计数加一/减一操作是原子性的,所以线程安全的。
5、make_shared要优于使用new,make_shared可以一次将需要内存分配好。
  std::shared_ptr<Test> p = std::make_shared<Test>();
  std::shared_ptr<Test> p(new Test);
  std::shared_ptr的大小是原始指针的两倍,因为它的内部有一个原始指针指向资源,同时有个指针指向引用计数。
6、引用计数是分配在动态分配的,std::shared_ptr支持拷贝,新的指针获可以获取前引用计数个数。
构造
1、通过构造函数
std::shared_ptr<T> p1(new T());
2、std::make_shared<T>辅助函数
std::shared_ptr<T> p2 = std::make_shared<T>();
3、reset方法来初始化shared_ptr
p1.reset(new T());
std::shared_ptr获得 std::weak_ptr 所指向的被管理对象的临时所有权
std::shared_ptr<T>  ptr =  std::weak_ptr<T> wPtr.lock()
1 use_count ()  // 返回引用计数的个数
2 unique()    // 返回是否是独占所有权( use_count 为 1)
3 swap()     // 交换两个 shared_ptr 对象(即交换所拥有的对象)
4 reset()    // 放弃内部对象的所有权或拥有对象的变更, 会引起原有对象的引用计数的减少
5 get()     //  返回内部对象(指针), 由于已经重载了()方法, 因此和直接使用对象是一样的.
如 shared_ptr<int> sp(new int(1)); sp 与 sp.get()是等价的、
原文地址:https://www.cnblogs.com/osbreak/p/9211257.html