03-Rust智能指针
use std::cell::RefCell;
use std::cell::Cell;
use std::rc::Rc;
fn main() {
let x = Box::new(RefCell::new(1));
*x.borrow_mut() = 100 ;
let y = Box::new(Cell::new(1));
y.set(100);
let z =Box::new(Rc::new(RefCell::new(1)));
*z.borrow_mut() =100;
println!("{:?},{:?},{:?}",x,y,z.borrow());
}
一、Box
- Box::new();
实现了Deref trait、Drop trait;
二、Deref trait
三、Drop trait
四、Rc 和 Arc、Weak<>
Rc::new();
Rc::clone(&T); //每克隆一次,引用次数新增一次
Rc::strong_count(&T);
Rc::weak_count(&T);
// 线程安全
Arc::new();
Arc::clone(&T);
Arc::strong_count(&T)
五、Cell 和 RefCell、RefMut
Cell
set()
RefCell
borrow_mut();