美文网首页
Rust学习——弱引用

Rust学习——弱引用

作者: P2501 | 来源:发表于2020-12-23 00:28 被阅读0次

问题:Rc<T>会引起循环引用
解决:使用弱引用
定义:Weak<T>

  1. 弱引用通过Rc::downgrade 传递Rc实例的引用,调用Rc::downgrade会得到Weak<T>类型的智能指针,同时将weak_count加1(不是将strong_count加1)。
  2. 区别在于weak_count 无需计数为0 就能使Rc实例被清理。只要strong_count为0就可以了。
  3. 可以通过Rc::upgrade方法返回Option<Rc<T>>对象。

C++中:



weak_ptr的岗位职责用一句话来描述就是:看managed object是否还存在,如果存在,可以提供负责管理该managed object的shared_ptr。

std::weak_ptr 是一个不控制资源生命周期的智能指针,是对对象的一种弱引用,只是提供了对其管理的资源的一个访问手段,引入它的目的为协助 std::shared_ptr 工作。

std::weak_ptr 可以从一个 std::shared_ptr 或另一个 std::weak_ptr 对象构造,std::shared_ptr 可以直接赋值给 std::weak_ptr ,也可以通过 std::weak_ptr 的 lock() 函数来获得 std::shared_ptr。它的构造和析构不会引起引用计数的增加或减少。std::weak_ptr 可用来解决 std::shared_ptr 相互引用时的死锁问题(即两个std::shared_ptr 相互引用,那么这两个指针的引用计数永远不可能下降为 0, 资源永远不会释放)。

相关文章

  • Rust学习——弱引用

    问题:Rc会引起循环引用解决:使用弱引用定义:Weak 弱引用通过Rc::downgrade 传递Rc...

  • Python 弱引用 学习

    转:python 初步认识弱引用 & 垃圾回收 - 要不,单步调试走起? - CSDN博客

  • Rust 所有权

    引用[https://www.runoob.com/rust/rust-ownership.html] 所有权规则...

  • 悬挂引用是如何被Rust消灭的?

    Rust承诺:引用始终有效。 可是,Rust引用并没有堆变量的生杀大权“Ownership”,对于堆变量,只能借来...

  • Rust语言编程实例100题-066

    Rust语言编程实例100题-066 题目:Rust指针练习。先来理解下引用和借用的概念。引用是作为参数传递给函数...

  • Rust for cpp devs - 智能指针

    与 cpp 类似,Rust 也有智能指针。Rust 中的智能指针与引用最大的不同是,智能指针 own 内存,而引用...

  • JAVA引用

    每天一篇系列:强化知识体系,查漏补缺。欢迎指正,共同学习! 在GC回收中提及到了弱引用,那强引用、软引用、弱引用、...

  • weak原理

    weak原理 弱引用指针添加到弱引用表。 NSObject.mm 弱引用的指针存储到弱引用表 通过哈希运算找到弱引...

  • iOS基础-弱引用

    实现弱引用 本文将整理 弱引用、强引用的定义 为什么会出现“弱引用” weak 实现原理 实现弱引用的N种方法 如...

  • JAVA引用(WeakHashMap、Cleaner)

    Reference 引用类 强引用、软引用、弱引用、虚引用 软引用、弱引用、虚引用,可以配合ReferenceQu...

网友评论

      本文标题:Rust学习——弱引用

      本文链接:https://www.haomeiwen.com/subject/powenktx.html