Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

内部可变性

有时类型需要在具有多个别名的情况下被修改。在 Rust 中,这是通过称为_内部可变性_(Interior Mutability)的模式实现的。

如果类型的内部状态可以通过共享引用更改,则该类型具有内部可变性。

这与通常的要求(共享引用指向的值不被修改)相矛盾。

std::cell::UnsafeCell<T> 类型是禁用此要求的唯一允许方式。当 UnsafeCell<T> 被不可变别名时,修改或获取其包含的 T 的可变引用仍然是安全的。

与所有其他类型一样,具有多个 &mut UnsafeCell<T> 别名是未定义行为。

可以通过使用 UnsafeCell<T> 作为字段来创建具有内部可变性的其他类型。标准库提供了各种提供安全内部可变性 API 的类型。

例如,std::cell::RefCell<T> 使用运行时借用检查来确保围绕多个引用的通常规则。

std::sync::atomic 模块包含包装仅通过原子操作访问的值的类型,允许该值在线程之间共享和修改。