mirror of
https://github.com/KaiserY/trpl-zh-cn
synced 2024-11-09 00:43:59 +08:00
Merge branch 'master' of https://github.com/KaiserY/trpl-zh-cn
This commit is contained in:
commit
289b1436b5
@ -1,4 +1,4 @@
|
|||||||
# 通用编程概念
|
# 常见编程概念
|
||||||
|
|
||||||
> [ch03-00-common-programming-concepts.md](https://github.com/rust-lang/book/blob/master/second-edition/src/ch03-00-common-programming-concepts.md)
|
> [ch03-00-common-programming-concepts.md](https://github.com/rust-lang/book/blob/master/second-edition/src/ch03-00-common-programming-concepts.md)
|
||||||
> <br>
|
> <br>
|
||||||
|
@ -99,7 +99,7 @@ fn main() {
|
|||||||
|
|
||||||
### 自定义智能指针
|
### 自定义智能指针
|
||||||
|
|
||||||
为了体会默认智能指针的行为不同于引用,让我们创建一个类似于标准库提供的 `Box<T>` 类型的只能指针。接着会学习如何增加使用解引用运算符的功能。
|
为了体会默认智能指针的行为不同于引用,让我们创建一个类似于标准库提供的 `Box<T>` 类型的智能指针。接着会学习如何增加使用解引用运算符的功能。
|
||||||
|
|
||||||
从根本上说,`Box<T>` 被定义为包含一个元素的元组结构体,所以示例 15-10 以相同的方式定义了 `MyBox<T>` 类型。我们还定义了 `new` 函数来对应定义于 `Box<T>` 的 `new` 函数:
|
从根本上说,`Box<T>` 被定义为包含一个元素的元组结构体,所以示例 15-10 以相同的方式定义了 `MyBox<T>` 类型。我们还定义了 `new` 函数来对应定义于 `Box<T>` 的 `new` 函数:
|
||||||
|
|
||||||
|
@ -56,8 +56,8 @@ RefCell<T> is, perhaps a succinct round up would help? -->
|
|||||||
如下为选择 `Box<T>`,`Rc<T>` 或 `RefCell<T>` 的理由:
|
如下为选择 `Box<T>`,`Rc<T>` 或 `RefCell<T>` 的理由:
|
||||||
|
|
||||||
- `Rc<T>` 允许相同数据有多个所有者;`Box<T>` 和 `RefCell<T>` 有单一所有者。
|
- `Rc<T>` 允许相同数据有多个所有者;`Box<T>` 和 `RefCell<T>` 有单一所有者。
|
||||||
- `Box<T>` 允许在编译时检查的不可变或可变借用;`RefCell<T>` 允许在运行时价差的不可变或可变借用
|
- `Box<T>` 允许在编译时执行不可变(或可变)借用检查;`Rc<T>`仅允许在编译时执行不可变借用检查;`RefCell<T>` 允许在运行时执行不可变(或可变)借用检查。
|
||||||
- 因为 `RefCell<T>` 允许在运行时检查的可变借用,可以在即便 `RefCell<T>` 自身是不可变的情况下修改其内部的值。
|
- 因为 `RefCell<T>` 允许在运行时执行可变借用检查,所以我们可以在即便 `RefCell<T>` 自身是不可变的情况下修改其内部的值。
|
||||||
|
|
||||||
最有一个理由便是指 **内部可变性** 模式。让我们看看何时内部可变性是有用的,并讨论这是如何成为可能的。
|
最有一个理由便是指 **内部可变性** 模式。让我们看看何时内部可变性是有用的,并讨论这是如何成为可能的。
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user