Rust 智能指针
- 什么是智能指针? “智能” 究竟是什么意思?
- 智能指针如何工作?
- Box,Cell, RefCell, Rc, Arc, RwLock, Mutex, 这些智能指针的作用是什么?
String, Vec 也是智能指针
Rust 中, Trait 决定了类型的行为,那么智能指针主要实现以下两个 Trait:
- Deref trait -> 拥有指针语义
- Drop trait -> 拥有内存自动管理机制
Copy 语义, Move 语义
解引用 * 是强制解引用, .,& 传参数 是自动解引用 *x -> *(x.deref)
智能指针智能在何处?
- 可以智能解引用,提升开发体验 deref trait
- 可以自动化管理内存,安全无忧 drop trait
遇到 . 操作符时,会触发自动解引用
标准库智能指针
- Box
- vec 和 string
- rc 和 ARC
- cell 和 Refcell
- RwLock 和 mutex
Rust 编译时需要知道一个类型需要占用空间多大,递归和 trait对象不知道空间大小
存在栈上的数据结构都是 copy 语义
Cell 需要 copy 语义的类型, 借助unsafe 来实现的 RefCell 不需要
Cell, RefCell 都线程不安全
Rc vs Arc
共享计数, 进入作用域 +1, 离开作用域减 1
Rc::new(), Rc::clone()