Rust如何处理Rc秒和Arc秒的"隔离岛"场景?

"隔离岛"是指对象A包含指向对象B的指针,而对象B包含指向对象A的指针,但在其他任何地方都没有指向这两个对象的指针.

Rust是否足够聪明,能够检测到这一点,还是会导致内存泄漏?

推荐答案

Rust没有垃圾收集器,也不会检测引用循环.如果你的程序创建了不可访问的引用循环,它们就会被泄露,你可以通过使用weak references或不使用共享所有权来避免它们.

请注意,创建引用循环的唯一方法是使用共享所有权和内部可变性.

另见chapter on reference cycles in the Rust book.

Rust相关问答推荐

如何将C指针到指针转换为Rust切片?

捕获Rust因C++异常而产生panic

通过解引用将值移出Box(以及它被脱糖到什么地方)?

编译项目期间使用Cargo生成时出现rustc错误

在自定义序列化程序中复制serde(With)的行为

如何修复数组中NewType导致的运行时开销

作为1字节位掩码的布尔值 struct

在Rust中判断编译时是否无法访问

随机函数不返回随机值

详尽的匹配模式绑定

仅发布工作区的二进制 crate

如何以与平台无关的方式将OsString转换为utf-8编码的字符串?

存储返回 impl Trait 作为特征对象的函数

Rust 中的内存管理

Rust:为什么 Pin 必须持有指针?

部署Rust发布二进制文件的先决条件

有什么办法可以追踪泛型的单态化过程吗?

Some(v) 和 Some(&v) 有什么区别?

在 Rust 中,Weak 如何知道内部值何时被删除?

当你删除一个存在于堆栈中的值时,为什么 rust 不会抱怨