Merge pull request #1566 from Natramit/main

Fix 3 typing error.
pull/1569/head
Sunface 2 months ago committed by GitHub
commit 5e718e6c71
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -76,7 +76,7 @@ fn main() {
#### 定义自己的智能指针 #### 定义自己的智能指针
现在,让我们一起来实现一个智能指针,功能上类似 `Box<T>`。由于 `Box<T>` 本身很简单,并没有包含如长度、最大长度等信息,因此用一个元组结构体即可。 现在,让我们一起来实现一个智能指针,功能上类似 `Box<T>`。由于 `Box<T>` 本身很简单,并没有包含如长度、最大长度等信息,因此用一个元组结构体即可。
```rust ```rust
struct MyBox<T>(T); struct MyBox<T>(T);
@ -206,7 +206,7 @@ fn main() {
} }
``` ```
对于 `s1`,我们通过两次 `Deref``&str` 类型的值赋给了它(**赋值操作需要手动解引用**);而对于 `s2`,我们在其上直接调用方法 `to_string`,实际上 `MyBox` 根本没有没有实现该方法,能调用 `to_string`,完全是因为编译器对 `MyBox` 应用了 `Deref` 的结果(**方法调用会自动解引用**)。 对于 `s1`,我们通过两次 `Deref``&str` 类型的值赋给了它(**赋值操作需要手动解引用**);而对于 `s2`,我们在其上直接调用方法 `to_string`,实际上 `MyBox` 没有实现该方法,能调用 `to_string`,完全是因为编译器对 `MyBox` 应用了 `Deref` 的结果(**方法调用会自动解引用**)。
## Deref 规则总结 ## Deref 规则总结

@ -171,7 +171,7 @@ fn main() {
error[E0277]: `Rc<String>` cannot be sent between threads safely error[E0277]: `Rc<String>` cannot be sent between threads safely
``` ```
表面原因是 `Rc<T>` 不能在线程间安全的传递,实际上是因为它没有实现 `Send` 特征,而该特征恰恰是多线程间传递数据的关键,我们会在多线程章节中进行讲解。 表面原因是 `Rc<T>` 不能在线程间安全的传递,实际上是因为它没有实现 `Send` 特征,而该特征恰恰是多线程间传递数据的关键,我们会在多线程章节中进行讲解。
当然,还有更深层的原因:由于 `Rc<T>` 需要管理引用计数,但是该计数器并没有使用任何并发原语,因此无法实现原子化的计数操作,最终会导致计数错误。 当然,还有更深层的原因:由于 `Rc<T>` 需要管理引用计数,但是该计数器并没有使用任何并发原语,因此无法实现原子化的计数操作,最终会导致计数错误。

Loading…
Cancel
Save