std::shared_ptr<int> sPtr(new int(5)); std::weak_ptr<int> wPtr = sPtr; //weak_ptr不会改变shared_ptr,但是会和shared_ptr的引用保持一致 std::shared_ptr<int> sPtr2 = wPtr.lock(); //wPtr.lock()后会改变shared_ptr的引用计数(+1)
std::cout<<"shared_ptr object(int) size = "<<sizeof(a)<<std::endl; ??std::cout<<"shared_ptr object(char) size = "<<sizeof(b)<<std::endl; ??? ??std::weak_ptr<A>shadow_a; ??std::weak_ptr<B>shadow_b; ??? ??{ ??std::shared_ptr<A>ptr_a=std::make_shared<A>()...
weak_ptr是一个弱引用的智能指针,它可以与shared_ptr一起使用。weak_ptr不会增加所管理的对象的引用计数,因此它不会影响对象的生命周期。可以通过weak_ptr的lock成员函数来获取一个指向所管理的对象的shared_ptr。需要注意的是,在使用lock函数之前,需要判断weak_ptr是否已经过期,即判断其指向的对象是否已经被销毁。
weak_ptr就是用来解决循环引用问题的,所以拷贝和赋值的智能指针必须是shared_ptr。weak_ptr和shared_ptr并不是同一个类,所以获取shared_ptr中的_ptr时,不能直接访问,需要通过shared_ptr的接口get()来获取。 template<class T> // 辅助型智能指针,配合解决shared_ptr循环引用问题 class weak_ptr // 没有RAII,不...
weak_ptr weak_ptr概述: 用来辅助shared_ptr进行工作 week 弱 弱共享 弱引用 共享其他shared_ptr所指向的对象 强指针指的是 shared_ptr 弱指针指的是 weak_ptr weak_ptr 也是类模板,也是智能指针,这个智能指针用来指向一个shared
weak_ptr引入可以解决shared_ptr交叉引用时无法释放资源的问题。 示例代码: #include<iostream>#include<memory>usingnamespacestd;classB;classA{public:A(){cout <<"A constructor ... "<< endl;} ~A(){cout <<"A destructor ..."<< endl;} ...
new XXX(shared_from_this()) 如果用强指针去接,则增加引用计数;弱引用去接,不增加引用计数。auto去接等同强指针。weak_ptr 传给thread、timer回调,不能使用expired()判断 new XXX(shared_from_this()) 如果用强指针去接,则增加引用计数;弱引用去接,不增加引用计数。auto去接等同强指针。
使用lock() 方法,如果 std::weak_ptr 过期则返回空的 std::shared_ptr。 std::shared_ptr<Widget> spw1 = wpw.lock(); // 如果 wpw 过期,spw1 将为空 1. 或者直接构造 std::shared_ptr,如果 std::weak_ptr 过期则抛出 std::bad_weak_ptr 异常。
值得一提的是,和 unique_ptr、weak_ptr 不同之处在于,多个 shared_ptr 智能指针可以共同使用同一块堆内存。并且,由于该类型智能指针在实现上采用的是引用计数机制,即便有一个 shared_ptr 指针放弃了堆内存的“使用权”(引用计数减 1),也不会影响其他指向同一堆内存的 shared_ptr 指针(只有引用计数为 0 时,堆...
简介:从C语言到C++_36(智能指针RAII)auto_ptr+unique_ptr+shared_ptr+weak_ptr 从C语言到C++_36(智能指针RAII)auto_ptr+unique_ptr+shared_ptr+weak_ptr(上):https://developer.aliyun.com/article/1522495 3.1 auto_ptr模拟代码 (上面SmartPtr再加一个赋值重载改下名字就差不多是auto_ptr的模拟了,再用命...