跳到主要内容

所有权系统

所有权系统

解引用: 显示 *

  1. 实现了 copy:* &T -> T 不移动值,栈上逐位复制值,有一些 copied() 方法;
  2. 实现了clone:堆上克隆值

隐式 deref T: Deref<Target U>

复合类型所有权, struct 拥有其所有成员的所有权。其成员可能借用了外部变量,需要使用 'static 生命周期标注。 struct(T)

借用: 可变借用:&mut data 再借用(Reborrowing): &mut *T (T = &mut data) 不可变借用:&T

Pin<T> 自引用结构体,用于固定结构体的地址,将结构体转移到堆上,对外暴露的是 Pin<T> 地址。

move 移动: 我们的系统里都是移动,移动会栈上逐位复制。

let a = "dafd";
let b = a; // 移动

&mut T 不能移动,只能再借用

  • &T共享引用(只读),它只借用了值,不拥有所有权
  • *&T 这个操作,本质是试图从引用中 "取出" 并移动值
  • Rust 不允许从共享引用中移动值(否则原变量会失效,违反借用规则)
  • 只有当 T 实现了 Copy 时,*&T 才会复制值而不是移动值,因此合法

没有实现 Copy,那么使用 .clone 复制值、take、replace 等操作复制值。

return ,在函数中,无论哪里。立即结束函数,返回值。