weak_ptr是一种用于解决shared_ptr相互引用时产生死锁问题的智能指针。如果有两个shared_ptr相互引用,那么这两个shared_ptr指针的引用计数永远不会下降为0,资源永远不会释放。weak_ptr是对对象的一种弱引用,它不会增加对象的use_count,weak_ptr和shared_ptr可以相互转化,shared_ptr可以直接赋值给weak_ptr,weak_ptr...
共享同一块内存std::shared_ptr<int>ptr2=ptr1;// 增加引用计数std::cout<<ptr1.use_count()<<std::endl;// 输出: 2// 通过弱引用指针weak_ptr解决
所以,当使用unique_ptr时,在任何一个资源上最多只能有一个unique_ptr,当该unique_ptr被破坏时,该资源将被自动声明。 另外,由于任何资源只能有一个unique_ptr,所以任何创建unique_ptr副本的尝试将导致编译时错误。 unique_ptr<A> ptr1 (new A); // Error: can't copy unique_ptr unique_ptr<A> ptr2 = ...
std::unique_ptr<int> ptr3 = std::move(ptr1); // 正确:可以移动unique_ptr 3. weak_ptr weak_ptr是对一个shared_ptr所管理对象的弱引用。它不会增加引用计数,因此不会延长对象的生命周期。weak_ptr主要用于解决shared_ptr之间的循环引用问题。 语法: cpp std::weak_ptr<T> wptr = ptr; // ptr是...
shared_ptr、unique_ptr和weak_ptr是C++中智能指针的三种类型,它们用于管理动态分配的内存,避免内存泄漏和悬空指针的问题。 shared_ptr(共享指针): 概念:shared_ptr是一种引用计数智能指针,可以跟踪有多少个指针共享同一块内存资源。 优势:可以在多个地方共享同一块内存资源,当最后一个shared_ptr离开作用域时,...
weak_ptr指针使用 使用shared_ptr 时, 如果存在循环引用, 将导致内存泄露.weak_ptr指针 是为配合 shared_ptr 而引入的一种智能指针来协助 shared_ptr 工作, 它只可以从一个 shared_ptr 或另一个 weak_ptr 对象构造, 它的构造和析构不会引起引用记数的增加或减少. ...
shared_ptr的用法 从名字上看shared_ptr是共享指针,意味着我们可以复制shared_ptr,复制出的智能指针指向同一个内部数据指针(即被智能指针包装的真正数据)。 构造shared_ptr 有多种方法可以构造shared_ptr,下面代码中有4种构造方式: int *p = new int(1); ...
weak_ptr 是一种不控制对象生命周期的智能指针, 它指向一个 shared_ptr 管理的对象. 进行该对象的内存管理的是那个强引用的 shared_ptr. weak_ptr只是提供了对管理对象的一个访问手段。weak_ptr 设计的目的是为配合 shared_ptr 而引入的一种智能指针来协助 shared_ptr 工作, 它只可以从一个 shared_ptr 或另...
unique_ptr是auto_ptr的继承者,对于同一块内存只能有一个持有者,而unique_ptr和auto_ptr唯一区别就是unique_ptr不允许赋值操作,也就是不能放在等号的右边(函数的参数和返回值例外),这一定程度避免了一些误操作导致指针所有权转移,然而,unique_str依然有提供所有权转移的方法move,调用move后,原unique_ptr就会失效,...
std::unique_ptr<Student> unque_p2(std::move(unique_p)); // 移动构造可以,让unique_p为空2.shared_ptr: 内存由多个指针变量共同使用,共同拥有内存的所有权,但是必须杜绝循环拷贝!并且shared_ptr 需要维护的信息有两部分:指向共享资源的指针;引用计数等共享资源的控制信息——维护一个指向控制信息的指针。Stu...