Rust 所有权
阐述
- Rust 中每一个值都被一个变量所拥有,该变量被称为值的所有者
- 一个值同时只能被一个变量所拥有,或者说一个值只能拥有一个所有者
- 当所有者(变量)离开作用域范围时,这个值将被丢弃
赋值时的行为
在栈上分配的类型赋值给别的变量时发生的是拷贝,而在堆上分配的类型赋值给别的变量时发生的是移动。
函数传值的行为
将值传给函数时也会发生移动。但如果函数类型声明为 &T
,则并不拥有该实参的所有权,而只是创建了一个引用。如果还想要修改这个变量,就需要声明为可变引用。
可变引用同一作用域只能存在一个,并且也不能同时存在可变引用和不可变引用。
实例
这是栈上的拷贝:
let x = 5;
let y = x;
println!("x = {}, y = {}", x, y);
这段代码会报错:
let s1 = String::from("hello");
let s2 = s1;
println!("{}, world!", s1);
而要拷贝字符串需要:
let s1 = String::from("hello");
let s2 = s1.clone();
println!("s1 = {}, s2 = {}", s1, s2);