04-内部可变性

内部可变性 — The Rust Reference

译文 · 基于 The Rust Reference

原文链接: https://doc.rust-lang.org/reference/interior-mutability.html

r[interior-mut]

内部可变性

r[interior-mut.intro] 有时一个类型需要在存在多个别名的情况下被修改。在 Rust 中,这通过一种称为 内部可变性 的模式来实现。

r[interior-mut.shared-ref] 若一个类型的内部状态可以通过指向它的共享引用来改变,则该类型具有内部可变性。

r[interior-mut.no-constraint] 这与通常的要求——共享引用所指向的值不得被修改——相悖。

r[interior-mut.unsafe-cell] [std::cell::UnsafeCell<T>] 类型是允许关闭这一要求的唯一方式。当 UnsafeCell<T> 被不可变地别名时,修改其中包含的 T,或获取指向该 T 的可变引用,仍然是安全的。

r[interior-mut.mut-unsafe-cell] 与所有其他类型一样,同时存在多个 &mut UnsafeCell<T> 别名是未定义行为。

r[interior-mut.abstraction] 其他具有内部可变性的类型可以通过将 UnsafeCell<T> 用作字段来创建。标准库提供了多种提供安全内部可变性 API 的类型。

r[interior-mut.ref-cell] 例如,[std::cell::RefCell<T>] 使用运行时借用检查来确保围绕多重引用的通常规则。

r[interior-mut.atomic] [std::sync::atomic] 模块包含一些类型,它们包装一个仅通过原子操作访问的值,从而允许该值在线程间共享并被修改。

最后修改 August 21, 2026: 更新 (76fc81a2e)