面试题答案
一键面试- 所有权转移:
- 在Rust中,当执行
b = a
(其中a
和b
是String
类型变量)时,a
的所有权转移到b
。这意味着a
不再拥有分配给String
的内存,而b
现在是这块内存的所有者。
- 在Rust中,当执行
- 内存管理:
String
类型在堆上分配内存来存储其内容。当a
的所有权转移到b
时,堆上用于存储a
内容的内存不会被重新分配或释放。b
现在指向并管理这块内存。- 当
b
超出其作用域时,Rust的内存管理系统(通过Drop
trait)会自动释放堆上与b
相关联的内存。
- 对后续代码的影响:
- 因为
a
已经转移了所有权,后续代码中如果尝试使用a
,会导致编译错误。例如:
fn main() { let mut a = String::from("hello"); let mut b = a; println!("{}", a); // 这一行会编译失败,因为a已经转移了所有权 println!("{}", b); // 这一行正常,b现在拥有所有权并可以使用 }
- 编译器会报错类似于
use of moved value: 'a'
,提示变量a
已经被转移了所有权,不能再被使用。这样可以确保内存安全,避免悬空指针或重复释放内存等问题。
- 因为