簡體   English   中英

結構必須超過成員引用

[英]Struct must outlive member reference

我不確定如何正確地為此帖子加上標題。 我對Rust還是很陌生,並嘗試按照這種簡單的結構編譯程序,但這似乎是不正確的,而且我不確定為什么。

struct Bar;

impl Bar {
    fn do_thing(&self) { println!("Ha, do nothing!") }
}

struct Foo<'a> {
    bar: &'a Bar
}

impl<'a> Foo<'a> {
    fn new(b: &Bar) -> Foo { Foo { bar: b } }
    fn get_bar(&self) -> &Bar { self.bar }
}

fn main() {
    let b = Bar;
    let b_ref = {
        let f = Foo::new(&b);
        f.get_bar()
    };
    b_ref.do_thing();
}

此處的編譯器錯誤聲稱f壽命不足。 不過, f生存時間b_ref的有效期與b一樣長,而且我認為引用是Copy因此我們不必擔心f的實際引用。 這相關嗎?

我的一部分感覺是我需要指定從get_bar返回的&Bar的生存期,但是我不知道如何將其與Foo結構的生存期聯系起來?

我在這里想念什么?

您必須指定要返回的引用與生命周期'a ,而不與編譯器將為您推斷的self的生命周期相關:

impl<'a> Foo<'a> {
    fn new(b: &Bar) -> Foo { Foo { bar: b } }
    fn get_bar(&self) -> &'a Bar { self.bar }
}

這等效於原始代碼:

impl<'a> Foo<'a> {
    fn new(b: &Bar) -> Foo { Foo { bar: b } }
    fn get_bar<'b>(&'b self) -> &'b Bar { self.bar }
}

我的一部分感到應該指定從get_bar返回的&Bar的生存期,但是我不知道如何將其與Foo結構的生存期聯系起來?

在這種情況下, Foo的壽命根本不重要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM