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