rust 所有权

134 阅读1分钟

变量

编程中的变量,在内存中,表现形式是内存地址+该地址存储的值。rust对该值的操作(读写)进行控制。值只能有一个变量对其有控制权

  • 不可变变量 只能绑定初始值,取得初始值所有权,在该所有权有效期也就是作用域内,值不可变
  • 可变变量 值在作用域内可以改变

引用

  • 不可变变量能具有多个不可变引用,不能具有可变引用
  • 可变变量最多只有有一个可变应用,能有多个不可变引用。存在不可变引用时,不允许对值 进行修改
fn main() {
    let  s0 = String::from("hello");
    let r1 = &s0;
    let r2 = &s0;
    let r1 = &mut s0;  // 报错



    let mut s1 = String::from("hello");
    let r0 = &mut s1;
    let r1 = &s1;
    let r2 = &s1;
    s1.push_str("123");    // 报错
}

悬挂引用

fn main() {
    let reference_to_nothing = dangle();
}

fn dangle() -> &String {
    let s = String::from("hello");

    &s
}

这种情况是禁止的,与c,c++相同,go则是会发生变量逃逸