头文件<memory>
特点:
(1) 智能指针主要的用途就是方便资源的管理,自动释放没有指针引用的资源。
(2) 使用引用计数来标识是否有多余指针指向该资源。(注意,shart_ptr本身指针会占1个引用)
(3) 在赋值操作中, 原来资源的引用计数会减一,新指向的资源引用计数会加一。
std::shared_ptr<Test> p1(new Test);
std::shared_ptr<Test> p2(new Test);
p1 = p2;
(4) 引用计数加一/减一操作是原子性的,所以线程安全的。
(5) std::shared_ptr的大小是原始指针的两倍,因为它的内部有一个原始指针指向资源,同时有个指针指向引用计数。
(6) 引用计数是分配在动态分配的,std::shared_ptr支持拷贝,新的指针获可以获取前引用计数个数。
(7)当析构最后一个对象的时候,才真正释放内存。
成员函数:
(1)use_count 返回引用计数的个数。
(2)unique 返回是否是独占所有权( use_count 为 1)。
(3)swap 交换两个 shared_ptr 对象(即交换所拥有的对象)。
(