所有权关系:shared_ptr具有共享所有权,多个shared_ptr可以共享同一块内存资源,当最后一个shared_ptr销毁时,内存资源才会被释放;而weak_ptr不具有所有权,它只是对shared_ptr的观察,不会增加引用计数,也不会影响内存资源的释放。 风险:由于shared_ptr共享所有权,可能会导致循环引用的问题,即两个或多个shared_ptr相互...
值得注意的一点是shared_ptr可以直接用指向对象的指针来构造,但是不推荐这样,因为如果同时声明了两个这样的shared_ptr就会造成对同一空间的重复删除。 weak_ptr 如此来看,weak_ptr就显得相对简单。它是一种本身不控制指向对象生命周期的智能指针,它指向一个由shared_ptr管理的对象,但是不会改变shared_ptr的引用计数。
weak_ptr是对一个shared_ptr所管理对象的弱引用。它不会增加引用计数,因此不会延长对象的生命周期。weak_ptr主要用于解决shared_ptr之间的循环引用问题。 语法: cpp std::weak_ptr<T> wptr = ptr; // ptr是一个shared_ptr<T> 语义: weak_ptr不拥有所指向的对象,它只是一个观察员。 你可以通过weak_ptr的l...
从构造函数的参数来看(无参构造函数除外),只能使用shared_ptr或weak_ptr来构造一个weak_ptr对象,包括赋值函数也是这样的,这就和shared_ptr有很大区别了,从4.1.1小节可以看到shared_ptr是可以使用普通指针来构造的 可以调用lock方法来获得一个shared_ptr,lock方法的实现后面再讲该...
shared_ptr的用法 从名字上看shared_ptr是共享指针,意味着我们可以复制shared_ptr,复制出的智能指针指向同一个内部数据指针(即被智能指针包装的真正数据)。 构造shared_ptr 有多种方法可以构造shared_ptr,下面代码中有4种构造方式: int *p = new int(1); ...
weak_ptr 为弱引用, 可以避免此问题, weak_ptr 在功能上类似于普通指针, 然而一个比较大的区别是, 弱引用能检测到所管理的对象是否已经被释放, 从而避免访问非法内存。 注意: 虽然通过弱引用指针可以有效的解除循环引用, 但这种方式必须在程序员能预见会出现循环引用的情况下才能使用, 也可以是说这个仅仅是一种...
unique_ptr、shared_ptr和weak_ptr都是C++11引入的智能指针,它们自动管理内存,帮助防止内存泄漏。它们的区别主要在于它们如何管理所指向对象的生命周期和所有权。 unique_ptr: 所有权唯一:unique_ptr拥有它所指向的对象,保证同一时间只有一个unique_ptr指向特定对象。
特点:weak_ptr是一种不拥有对象的智能指针。它被设计为与shared_ptr协同工作,用于访问shared_ptr所指向的对象,而不增加对象的引用计数。这意味着weak_ptr的存在不会阻止所指对象的销毁。 用途:weak_ptr主要用于解决shared_ptr可能引起的循环引用问题。例如,在构建复杂的数据结构如图或树时,weak_ptr可以用来安全地引用...
2.unique_ptr 19:24 3.shared_ptr与weak_ptr 36:28 4.std::move 与 值类型 20:13 5.std::forward,引用折叠,万能引用 26:01 6.函数重载专题 18:46 7.关于const 21:58 8.const reference延续临时变量l 07:07 9.成员函数const重载的本质 04:10 10.函数传参之左值与右值 05:53 11.La...