如果对象已被解构,是否有可能有一个短暂的 Rust ref 返回 None ?

wro*_*ame 2 rust

我可以有类似的东西吗

struct LongLivedStruct { // lasts for a long time
    possibleRef: ShortLivedRc<SomeTrait> // SomeTrait will be freed soon
}
Run Code Online (Sandbox Code Playgroud)

这样我以后就可以尝试取消引用它:

impl LongLivedStruct  {
    fn try_to_do_something(&self) -> &str {
        match &self.possibleRef.try_deref() {
            Ok(_) => "Value still exists, we can do something with it!"
            Err(_) => "Value has already been deconstructed"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果它不再存在,它不会恐慌?

Fly*_*FoX 5

在我看来,您可以使用引用来做到这一点。

您可以创建在一个弱引用存储LongLivedStruct调用RC ::降级Rc与你的SomeTrait对象并将其存储在你的LongLivedStruct

然后你可以通过调用Weak::upgrade来取回它Option<Rc<SomeTrait>>