// 什么是所有权?
// 1. Each value in Rust has a variable that’s called its owner.
// 2. There can only be one owner at a time.
// 3. When the owner goes out of scope, the value will be dropped.
fn print(msg: String) {
println!("{}", msg)
}
// 数据赋值 和 所有权转移
fn create_a_variable() {
// system 是变量名, "hello" 是数据
// 数据"hello"存储在内存中.
// 变量名 system 拥有数据 "hello" 的所有权.
let system = String::from("windows");
// 变量当作参数传递, 默认情况下会转移所有权,
// 并且变量名会被回收掉, 后续程序不能再调用这个变量名.
print(system);
// print(system); // 这里会报错: value used here after move
{
let a = "hello";
}
println!("{}", a) // 这里会报错: cannot find value `a` in this scope
// 备注:
// 这个函数中的代码, 展示了所有权的所有规则.
// let system = String::from("windows") 对应的是第一条规则.
//
// print(system) 对应的是第二条规则, 数据同一时间只能拥有一个所有权,
// 也就是说变量当作参数传递进去之后, system就不再拥有 "windows" 这个数据的所有权,
// 当一个变量名没有所有权时, 编译器会自动回收该变量名.
//
// println!("{}", a) 对应的是第三条规则, 它引用了一个子作用域中的变量名,
// 子作用域中的变量名并没有传递出来, 因此编译器会drop掉这个变量名.
}
fn main() {
create_a_variable()
}
rust--什么是ownership?
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...