1)Rust 中每一个值或者对象都有一个称之为其 所有者(owner)的变量。
例如:
let obj = String::from("hello"); obj是String对象的所有权变量。
2)值或对象有且只能有一个所有者。
3)当所有者离开作用域,所有者所代表的对象或者值会被立即销毁。
4)赋值语句、函数调用、函数返回等会导致所有权转移,原有变量会失效。
例如:
fn main() { let s = String::from("hello"); let s1 = s; //所有权发生了转移,由s转移给s1 print!("{}",s); //s无效,不能访问,此句编译会报错 } fn test(s1:String){ print!("{}",s1); }
fn main() { let s = String::from("hello"); test(s); //传参,所有权发生了转移 print!("{}",s); //此处s无效,编译报错 } Rust的所有权规则保证了同一时刻永远只有一个变量持有一个对象的所有权,避免数据竞争。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。