分栏式网站,广告制作公司简介怎么写,百度搜索热度,外包公司和劳务派遣的区别文章目录 隐藏shadowing所有权ownership堆区栈区所有权规则变量数据Copy Trait与Drop TraitCopy TraitDrop Trait移动克隆函数参数与返回值的所有权参数引用可变引用悬垂引用slice生命周期隐藏shadowing 有点像同名覆盖 let mut guess = String::new();let guess: u3… 文章目录 隐藏shadowing所有权ownership堆区栈区所有权规则变量数据Copy Trait与Drop TraitCopy TraitDrop 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 方法。