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()是等价的、