03-Rust智能指针

03-Rust智能指针

  • 一、Box
  • 二、Deref trait
  • 三、Drop trait
  • 四、Rc 和 Arc、Weak<>
  • 五、Cell 和 RefCell、RefMut
    • Cell
    • RefCell

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();
03-Rust智能指针_第1张图片
03-Rust智能指针_第2张图片

你可能感兴趣的:(rust,开发语言,后端)