rust学习_生命周期

1.生命周期注释的是什么

   比喻:给钥匙上贴了一个标签,写着只能周一到周五使用    

                 1.钥匙:一个变量的引用

                 2.标签:给引用添加 生命周期注释  

   代码示例

fn main() {  
    let message = String::from("hello world"); // message 的生命周期开始  
    let message_ref = &message;  
  
    print_message(message_ref);  
}  
  
fn print_message<'a>(message: &'a str){ //引用变量作为参数传递在函数间传递时,需要加 'a 标
   println !("{}", message)
}

2.借用和所有权的区别  

  比喻

     借用:你借用了朋友的车,但是车还是朋友的,你用完要还给他。他有这个车的使用权 

     所有权:你买了一个二手车 可以随用使用,也可以卖掉,完全由你控制。原来的人无法使用

  代码示例

     借用

fn main(){
        let my_car = Car { model: "Tesla".to_string() }
        drive_car(&my_car)  //借用了car  // drive_car这个函数借用了my_car, 但是my_car还是属于main这个函数
        println!("Finish driving {}",my_car.model)   //main这个函数依旧可以使用car
     }

     所有权

   let my_car = Car { model: "Tesla".to_string() }
     buy_car(my_car)     //buy_car这个函数买了我的车 获得了车的所有权 
     println!("{}",my_car)    //我无法继续使用这个车了  buy_car这个函数可以随意使用

3.结构体中的生命周期
  比喻: 1.有一个房间放有多个保险箱(每个保险箱是一个结构体),这个房间里的保险箱钥匙的有效期(结构体字段)必须保留到房间钥匙的有效期  
  代码示例

struct Book<'a> {
      content: &'a str  结构体字段的生命周期注释
}
impl<'a>Book<'a>{ 
  fn new(title: &'a str) ->self { //实例化该结构体
     Book {title}
  }

 fn title(&self) -> &str {  //返回结构体的title
        self.title
  }
}

fn main() {
    let title = String::from("Rust Programming");
    let book = Book::new(&title); // `book` 借用了 `title` 的一个切片

    println!("The book title is: {}", book.title());
    // 当 `title` 在这里仍然有效时,`book` 可以安全地使用 `title` 的引用。
}

4.函数中的生命周期

你开车进了一个临时停车场(函数),车辆(数据)可以进来,但是当停车场关闭(函数结束),所有车辆必须离开(数据清理) 

// 定义一个函数来处理消息
fn process_message<'a>(message: &'a str) {
    println!("Processing message: {}", message);
}

fn main() {
    let message = String::from("Hello, world!");
    
    // 调用 process_message 函数
    process_message(message.as_str());    //main函数时message.as_str()的所有者,因此main函数结束时,其数据被清理
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

simper_zxb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值