MST

星途 面试题库

面试题:Rust结构体中self生命周期管理的基础应用

在Rust中,给定如下结构体定义: ```rust struct MyStruct { data: String } impl MyStruct { fn print_data(&self) { println!("Data: {}", self.data); } } ``` 解释`&self`在这里的生命周期含义,并且说明如果`print_data`函数需要返回`self.data`的引用,应该如何修改函数签名及相关代码以正确管理生命周期?
33.9万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
  1. &self的生命周期含义
    • 在Rust中,&self表示对结构体MyStruct实例的不可变引用。它的生命周期是从该引用创建开始,到包含该引用的作用域结束时结束。在print_data函数中,&self的生命周期确保了在函数执行期间,self所指向的MyStruct实例不会被释放,从而保证self.data(即String类型的数据)也不会被释放,这样函数才能安全地访问和打印self.data
  2. 修改函数签名及相关代码以返回self.data的引用
    struct MyStruct {
        data: String
    }
    
    impl MyStruct {
        fn get_data(&self) -> &str {
            &self.data
        }
    }
    
    • 函数签名从fn print_data(&self)修改为fn get_data(&self) -> &str。这里返回类型为&str,因为&self.dataString的切片,其类型为&str
    • Rust会自动推断&self和返回值&str的生命周期是一致的,都与调用该方法的MyStruct实例的生命周期相关联。这样就正确管理了生命周期,确保在返回self.data的引用时,self.data所对应的内存不会提前被释放。