BorrowChecker所有权

张开发
2026/5/30 5:45:48 15 分钟阅读
BorrowChecker所有权
所有权就是管理内存的一套“责任到人”的规则。1.每本书只有一个“当前借阅人”每个值只有一个所有者a.一本书不能被两个人同时借走没有共享所有权。b.你是当前借阅人你就有责任保管和归还这本书。2.书可以“转借”所有权可以转移a.你把书转借给朋友从此这本书就归朋友负责你不能再使用它因为你不拥有它了。b.如果你还试图翻看这本书管理员编译器就会拦住你“这已经不是你的书了”3.借阅人离开书自动归还所有者离开作用域内存自动释放a.当你和朋友离开图书馆这本书会自动被收回内存释放。b.你不需要打电话喊管理员来收书系统自动完成。为什么需要这个规则很多编程语言如 C、C让你自己负责内存就像让你自己记住还书。很容易忘记还内存泄漏或者书被别人借走了你还去翻悬垂指针。而 Java、Go、Python 这类语言有“自动垃圾回收”就像图书馆雇了一个专门的管理员定期检查哪些书没人用了然后收回去。但这样会多花人力运行时开销。Rust 的所有权系统是在借书的时候就定好规矩1.每本书只有一个主人。2.主人离开了书就自动还。3.想借给别人可以但你必须放弃所有权转移或者只是临时看一下借用不转移所有权。所有这些规则都是在借书的当时编译时就检查完毕不会等到图书馆关门运行时才发现问题。所以 Rust 既不需要专门的管理员无垃圾回收又能保证没有人拿错书内存安全。用代码看一眼let s1 String::from(《Rust编程》); // s1 是这本书的主人 let s2 s1; // 书被转借给 s2s1 不再是主人 println!({}, s1); // 报错你不是主人了不能再读这本书 println!({}, s2); // 正确s2 是当前主人 // 代码块结束s2 离开书自动归还内存释放总结所有权就是“谁负责谁释放”的单一责任制。每个数据只有一个主人主人离开数据就被自动清理。想用但不想要所有权那就“借用”。

更多文章