std::weak_ptr可以作为std::shared_ptr的构造函数参数,但如果std::weak_ptr指向的对象已经被释放,那么std::shared_ptr的构造函数会抛出std::bad_weak_ptr异常。 std::shared_ptr<int>sp1(newint(22));std::weak_ptr<int>wp=sp1;// point to sp1std::shared_ptr<int>sp2(wp);std::cout<<sp2.use_co...
弱引用智能指针 std::weak_ptr 可以看做是 shared_ptr 的助手,它不管理 shared_ptr 内部的指针。std::weak_ptr 没有重载操作符 * 和 ->,因为它不共享指针,不能操作资源,所以它的构造不会增加引用计数,析构也不会减少引用计数,它的主要作用就是作为一个旁观者监视 shared_ptr 中管理的资源是否存在。 一、...
weak_ptr可以说是shared_ptr的一种扩充,它既不可以提领指针也不可以检查是否为空,一般是通过shared_ptr进行创建,但是不会影响shared_ptr的引用次数。它可以使用下面代码判断指针是否空悬, std::sheard_ptr<int> a = std::make_shared<int>(); std::weak_ptr<int> b(a); a = nullptr; if(b.expired()...
weak_ptr是为配合shared_ptr而引入的一种智能指针,它更像是shared_ptr的一个助手,而不是一个智能指针。它的最大作用在于协助shared_ptr工作,像旁观者那样观测资源的使用情况。weak_ptr被设计为与shared_ptr协同工作,可以从一个shared_ptr或者另外一个weak_ptr对象构造,获得资源的观测权限。但weak_ptr没有共享资源,...
shared_ptr是一个模板类。 shared_ptr内部有两个指针,一个ptr指向对象,一个ptr指向控制块。控制块里面包含着引用计数(reference count,或者叫use_count)和一个弱计数(weak_count,一般在weak_ptr的配合下才起作用)。 shared_ptr示例 //普通的内存分配Buffer buf =newBuffer("auto free memory");deletebuf;//需...
一、weak_ptr的作用 weak_ptr主要针对shared_ptr的空悬指针和循环引用问题而提出: (1)空悬指针问题:有两个指针p1和p2,指向堆上的同一个对象Object,p1和p2位于不同的线程中。假设线程A通过p1指针将对象销毁了(尽管把p1置为了NULL),那p2就成了空悬指针。
(1)、weak_ptr是为了配合shared_ptr而引入的智能指针,它更像是shared_ptr的一个助手,它不具有普通指针的行为, 没有重载operator*和->,它的最大作用在于协助shared_ptr工作,像旁观者那样观测资源的使用情况。 (2)、2个重要接口:bool expired()const ;// 判断是否过期 ...
std::unique_ptr 特点:它提供了对一个对象的唯一所有权。这意味着同一时间内只能有一个unique_ptr指向特定的对象。当unique_ptr被销毁或离开其作用域时,它所指向的对象也会被自动删除。 用途:unique_ptr适用于需要确保资源唯一性的情况,比如在函数中创建一个临时对象,用于独占某种资源(如文件句柄)。
share_ptr作用:相当于一个容器,托管堆指针,实现智能释放堆内存,支持同个堆指针被多个容器托管 原理:利用容器临时变量的销毁,触发析构函数,将引用计数减少,引用计数为0...