File tree Expand file tree Collapse file tree 1 file changed +1
-1
lines changed Expand file tree Collapse file tree 1 file changed +1
-1
lines changed Original file line number Diff line number Diff line change 6
6
7
7
有时一个类型需要在存在多个别名时进行更改。在 Rust 中,这是通过一种叫做* 内部可变性* 的模式实现的。如果一个类型的内部状态可以通过对它的[ 共享引用] [ shared reference ] 来进行更改,那么就说这个类型就具有内部可变性。这违背了共享引用所指向的值不能被更改的通常[ 要求] [ ub ] 。
8
8
9
- [ ` std::cell::UnsafeCell<T> ` ] 类型是 Rust 中唯一可以合法失效此要求的方法 。当 ` UnsafeCell<T> ` 存在其他不变性的别名[ ^ 译注1 ] 时,仍然可以安全地对它包含的 ` T ` 进行更改或获得 ` T ` 的一个可变引用。与所有其他类型一样,拥有多个 ` &mut UnsafeCell<T> ` 别名是未定义行为。
9
+ [ ` std::cell::UnsafeCell<T> ` ] 类型是 Rust 中唯一可以合法实现此要求的方法 。当 ` UnsafeCell<T> ` 存在其他不变性的别名[ ^ 译注1 ] 时,仍然可以安全地对它包含的 ` T ` 进行更改或获得 ` T ` 的一个可变引用。与所有其他类型一样,拥有多个 ` &mut UnsafeCell<T> ` 别名是未定义行为。
10
10
11
11
通过使用 ` UnsafeCell<T> ` 作为字段,可以创建具有内部可变性的其他类型。标准库提供了几种这样的类型,这些类型都提供了安全的内部变更的 API。例如,[ ` std::cell::RefCell<T> ` ] 使用运行时借用检查来确保多个引用存在时的常规规则的执行。[ ` std::sync::atomic ` ] 模块包含了一些类型,这些类型包装了一个只能通过原子操作访问的值,以允许在线程之间共享和修改该值。
12
12
You can’t perform that action at this time.
0 commit comments