diff --git a/src/Ch15_Smart_Pointers.md b/src/Ch15_Smart_Pointers.md index a3d5c6c..914b9cc 100644 --- a/src/Ch15_Smart_Pointers.md +++ b/src/Ch15_Smart_Pointers.md @@ -621,11 +621,11 @@ $ cargo run **`Rc`, the Reference Counted Smart Pointer** -大多数情况下,所有权都是明确的:咱们确切知道,是哪个变量拥有者某个给定值。然而,单个值可能有着多个所有者的情形,也是有的。比如,在图数据结构(graph data structures),多条边就可能指向同一节点,从概念上讲,而那个节点就是被所有指向他的边所拥有的。在已不再有任何边指向节点,进而该节点已无所有者之前,这个节点就不应被清理掉。 +在大多数情况下,所有权是明确的:咱们确切地知道哪个变量拥有给定值。然而,在有些情况下,单个值可能有多个所有者。例如,在图数据结构中,多条边可能指向同一个节点,而该节点在概念上被所有指向他的边所拥有。一个节点不应该被清理,除非没有任何边指向他,因此没有了所有者。 -必须通过使用 Rust 的类型 `Rc`,来显式地启用多重所有权,`Rc` 即 *引用计数,reference counting* 的缩写。`Rc` 类型会追踪某个值的引用数,从而判断出该值是否仍在使用中。在到某个值的引用数为零时,该值就可以在不会有任何引用变成无效的情况下,(安全地)被清理掉。 +咱们必须使用 Rust 类型 `Rc` 显式启用多重所有权,`Rc` 是 *引用计数,reference counting* 的缩写。`Rc` 类型记录了对一个值的引用数量,以确定该值是否仍在使用。如果对某个值的引用为零,那么这个值就可以被清理掉,而不会有任何引用变得无效。 -请将 `Rc` 设想为客厅里的一台电视机。在有人进来看电视时,他们就会打开他。其他人是可以进来客厅而看电视的。在最后一人离开客厅时,由于电视已不再被使用,他们便关掉了电视机。而在其他人仍在看电视时,有人关了电视机,那么剩下的那些电视观众,就会哇哇叫的! +请将 `Rc` 设想为客厅里的一台电视。在有人进来看电视时,他们会打开他。其他人可以进入客厅并观看电视。当最后一人离开客厅时,他们会关掉电视,因为他已不再被使用了。如果有人在其他人还在看电视的情况下关掉电视,剩下的看电视的人就会哗然! 当咱们打算在内存堆上给咱们程序多个部分,分配用来读取的一些数据,且无法确定出,在编译时那些部分将最后用到这些数据时,咱们就会用到这个 `Rc` 类型。若咱们清楚那个部分将最后结束,那么就可以只把那个部分,构造为该数据的所有者,同时在编译时强制用到的一般所有权规则,就能发挥作用。