#rust
#Ржавчина
Вопрос:
Могу ли я иметь что-то вроде
struct LongLivedStruct { // lasts for a long time
possibleRef: ShortLivedRc<SomeTrait> // SomeTrait will be freed soon
}
так что я могу попытаться разыменовать его позже:
impl LongLivedStruct {
fn try_to_do_something(amp;self) -> amp;str {
match amp;self.possibleRef.try_deref() {
Ok(_) => "Value still exists, we can do something with it!"
Err(_) => "Value has already been deconstructed"
}
}
}
без паники, если он больше не существует?
Ответ №1:
Мне кажется, что вы можете сделать это со слабой ссылкой.
Вы можете создать слабую ссылку для хранения в вашем LongLivedStruct
, вызвав Rc::downgrade для Rc
вашего SomeTrait
объекта и сохранить его в вашем LongLivedStruct
.
Затем вы можете вернуть его, вызвав для него Weak::upgrade, чтобы получить Option<Rc<SomeTrait>>
ответ.