【04】RUST特性
文章目录
- 隐藏shadowing
- 所有权ownership
-
- 堆区&栈区
- 所有权规则
- 变量&数据
-
- Copy Trait与Drop Trait
-
- Copy Trait
- Drop Trait
- 移动
- 克隆
- 函数参数与返回值的所有权
-
- 参数
- 引用
-
- 可变引用
- 悬垂引用
- slice
- 生命周期
隐藏shadowing
有点像同名覆盖
let mut guess = String::new();
let guess: u32 = guss.trim().parse().expect("Please type a number!");
所有权ownership
通过所有权系统管理内存。通过编译时期的严格检查,从而保证在运行时所有权系统不会减慢程序。
堆区&栈区
类型 | 内存管理 | 大小 | 特点 | 存储 |
---|---|---|---|---|
栈区 | 已知大小 | 一般较少 | 先进后出 | 栈用于存储函数调用的上下文、局部变量和一些临时数据。 |
堆区 | 未知大小,动态分配内存 | 内存大于栈区 | 需要显示管理,分配和释放 | 存储需要在多个函数或更长生命周期中使用的数据。 |
所有权规则
- 每个值只有一个所有者(owner)。
- 值在任一时刻有且只有一个所有者。
- 当所有者(变量)离开作用域,这个值将被丢弃。
变量&数据
Copy Trait与Drop Trait
Rust 中,类型不能同时实现 Copy Trait 和 Drop Trait。如果为一个类型实现了 Drop Trait,那么无法为其实现 Copy Trait。
Copy Trait
Copy Trait
是一个标记(marker)trait,用于表示一个类型的值可以通过**按位复制(bitwise copy)**的方式进行复制,而不影响原来的值。
#[derive(Copy, Clone)]
struct Point {
x: i32,
y: i32,
}
#[derive(Copy, Clone)]
struct MyStruct {
a: i32,
b: String, // String 不实现 Copy
}
// 编译错误:`String` 不实现 `Copy`,因此 `MyStruct` 也不能实现 `Copy`
Drop Trait
提供了一种在值离开作用域时执行代码的方式,用于自定义资源清理逻辑。
drop 方法:当值要被销毁时,Rust 会自动调用实现了 Drop Trait 的类型的 drop 方法。