我可以有类似的东西吗
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)
如果它不再存在,它不会恐慌?
在我看来,您可以使用弱引用来做到这一点。
您可以创建在一个弱引用存储LongLivedStruct调用RC ::降级上Rc与你的SomeTrait对象并将其存储在你的LongLivedStruct。
然后你可以通过调用Weak::upgrade来取回它Option<Rc<SomeTrait>>。