35 lines
1.9 KiB
Markdown
35 lines
1.9 KiB
Markdown
## 智能指针
|
||
|
||
> Box — Rust 中的一种智能指针,作用就是为一个 把一个 属性 包装成一个具有move语义的属性 (被包装的这个)
|
||
- Box 可以包装任何对象,并且被包装之后的的 引用是一个 具有 move语义的
|
||
- Box 包装的引用 boxed,如果原本引用 a 是 实现了**Copy** 的,则可以继续使用,如果没有实现 Copy 特征,则不能再使用,因为原始引用的所有权,移到了boxed中,
|
||
- 在对Box解引用时,过程和Box 创建过程相反,如果原始引用是一个没有实现 Copy 的,也需要注意引用的所有权转移
|
||
|
||
> Box 包装之后的内容一定保存到堆上了
|
||
> Box<T> 实现了 Deref AsRef Drop,所以boxed 可以访问T 想像 T 自己一样
|
||
> Box 作为参数、Clone 特征、被引用,都和一般的类型一样,Clone需要考虑T 的Clone特征
|
||
> Box<Self>
|
||
> Arc — Rust 中的一种智能指针,Arc 是共享所有权模型的智能指针,也就是多个变量可以同时拥有一个资源的所有权
|
||
> Arc 的 clone — 是基于引用计数的操作,对被Arc 包装的引用的做引用计数,所以Arc 的clone,不用考虑原始类型
|
||
> Arc 不支持解引用、不能修改内部引用的值
|
||
|
||
---
|
||
|
||
## Rust 并发编程
|
||
|
||
- 异步编程的开启方式:async 声明一个异步的函数或作用域,使用await来执行 async 函数
|
||
- Rust 的异步运行时,
|
||
- 运行时的作用:
|
||
- 异步代码执行
|
||
- 代码暂停
|
||
- 状态的缓存
|
||
- 外部事件的监听注册
|
||
- 外部事件到来时,唤醒对应的任务,并恢复任务状态
|
||
- 多个任务之间的调度
|
||
- Rust 的异步运行时,没有官方标准版,tokio 的异步运行时,基本是Rust的事实上的异步运行时库
|
||
|
||
---
|
||
|
||
## Rust 中的异常
|
||
|
||
`?` 操作符;异常处理的一个 防御式编程 语法糖; 对 Result 的结果做解包,如果Result的结果是Err 就直接return 一个错误 |