Update Ch15

This commit is contained in:
Unisko PENG 2023-05-10 15:39:28 +08:00
parent 07a91ba7de
commit a57a626b1e

View File

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