Rust指针深入理解

Rust中共有三种类型的指针。分别为引用,解引用,智能指针。

引用 — 安全指针

  • & T:对类型T的不可变引用,只能读取不能修改。
  • mut &T: 对类型T的可变引用,在作用域的数据只能有一个可变引用,但是可以有多个不可变引用而且不能同时拥有不可变引用和可变引用。

指针

主要用于不安全代码中

  • *const T 表示指向类型T的不可变原始指针,它可以为空值
  • *mut T 可变原始指针

智能指针

之所以叫它们智能指针,是因为它们具备与之相关联的额外元数据和代码,它们会在创建和销毁指针时调用和指向。智能指针超过作用域时能够自动释放底层资源是采用它们的主要原因之一。
智能指针的特性可以归功于两个特性。Drop和Deref。

Drop

它可以自动释放相关值超出作用域占用的资源,以LIFO,先进后出的方式。
Rust指针深入理解_第1张图片在这里插入图片描述### Deref和DerefMut
为了能够解引用被指向类型的调用方法,允许用户对这些类型使用解引用运算符

Box

提供了堆上分配值,可以解决单链表的问题

RC

  • 当通过调用Clone()获取Rc的一个新共享引用,Rc会增加内部引用计数。
  • 当引用超出作用域时,会对引用计数器执行递减操作
  • 当所有共享引用计数超出作用域,refcount变为0,最后一次drop调用会执行相关的支援清理工作

Cell

为值提供可变性,甚至允许值位于不可引用之后

  • Cell::new允许通过传递任意类型T来创建Cell的新实例
  • get方法允许你复制单元(cell)中的值,仅当包装类型T为Copy时,该方法才有效
  • set:允许用户修改内部的值
  • RefCell

  • 如果需要某个非Copy类型支持Cell的功能,那么可以使用RefCell类型。它采用了和租借类似的读/写模式。
  • 使用borrow方法会接收一个新的不可变引用
  • 使用borrow_mut方法会接收一个新的可变引用

Cow

写时复制的智能指针

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