所有权系统
所有权系统
解引用:
显示 *;
- 实现了 copy:* &T -> T 不移动值,栈上逐位复制值,有一些 copied() 方法;
- 实现了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 ,在函数中,无论哪里。立即结束函数,返回值。