为什么所有权存在
内存安全与性能往往不可兼得,Rust 通过所有权系统在编译期解决这个问题——没有垃圾回收,也不会悬垂指针。
三条规则
- 每个值都有且只有一个所有者(owner)
- 值在离开作用域时被自动释放(drop)
- 同一时刻,要么有一个可变引用,要么有多个不可变引用
fn main() {
let s = String::from("hello");
let s2 = s.clone(); // 深拷贝
takes_ownership(s); // s 被移动
println!("{}", s2); // s2 仍可用
}
fn takes_ownership(v: String) {
println!("got: {}", v);
}
借用与生命周期
引用(borrow)不转移所有权。生命周期标注帮助编译器确认引用不会悬垂。
所有权不是限制,而是让编译器替你管理内存的契约。
评论