|
|
|
@ -14,11 +14,11 @@ Rust标准库中定义的那些智能指针,虽重但强,可以提供比引
|
|
|
|
|
|
|
|
|
|
智能指针往往是基于结构体实现,它与我们自定义的结构体最大的区别在于它实现了 `Deref` 和 `Drop` 特征:
|
|
|
|
|
|
|
|
|
|
- `Deref`可以让智能指针像引用那样工作,这样你就就可以写出同时支持智能指针和引用的代码, 例如`&T`
|
|
|
|
|
- `Deref` 可以让智能指针像引用那样工作,这样你就就可以写出同时支持智能指针和引用的代码,例如 `&T`
|
|
|
|
|
- `Drop` 允许你指定智能指针超出作用域后自动执行的代码,例如做一些数据清除等收尾工作
|
|
|
|
|
|
|
|
|
|
鉴于智能指针在Rust中很常见,因此我们在本章不会全部讲解,而是挑选几个最常用、最有代表性的进行讲解:
|
|
|
|
|
智能指针在 Rust 中很常见,我们在本章不会全部讲解,而是挑选几个最常用、最有代表性的进行讲解:
|
|
|
|
|
|
|
|
|
|
- `Box<T>`,可以将值分配到堆上
|
|
|
|
|
- `Rc<T>`, 引用计数类型,允许多所有权存在
|
|
|
|
|
- `Ref<T>`和`RefMut<T>`, 允许将借用规则检查从编译期移动到运行期进行
|
|
|
|
|
- `Rc<T>`,引用计数类型,允许多所有权存在
|
|
|
|
|
- `Ref<T>` 和 `RefMut<T>`,允许将借用规则检查从编译期移动到运行期进行
|
|
|
|
|