初面网初面网

生命周期

生命周期机制也是一种资源管理机制,主要是应对复杂类型系统中资源管理的问题。

引用可以用于复杂类型的资源管理,但如果对引用机制认识不清,就会出错。例如下面:

{
  let r;
  {
    let x = 5;
    r = &x;
  }
  println!("r: {}", r);
}

生命周期应当是统一的。在使用引用的时候,实际上每个引用的生命周期是不明确的,如果不特地标明,谁也不知道哪个引用值会先销毁。为了让编译器能够正确地管理内存,必须在使用引用的时候,明确地指定引用的生命周期。

先看一个错误案例:

struct Person{
  name: &str,
}

fn main(){
  let person = Person{name: "Alice"};
  println!("Hello, {}!", person.name);
}

编译器会报错,因为结构体中的name字段是一个引用类型,但没有指定它的生命周期。我们可以通过添加生命周期参数来解决这个问题:

struct Person<'a>{
  name: &'a str,
}

fn main(){
  let name = "Alice";
  let person = Person{name: name};
  println!("Hello, {}!", person.name);
}

在这个例子中,我们给结构体Person添加了一个生命周期参数'a,表示name字段的生命周期必须与某个外部引用的生命周期相同。这样编译器就能够正确地管理内存,避免了悬垂引用的问题。

更新于 2026/6/11