How to get a ref to T in RefCell<Option<T>>

use std::cell::RefCell;

struct Foo<T> {
    data: RefCell<Option<T>>,

impl<T> Foo<T>
    T: Default,
    fn new() -> Self {
        Self {
            data: RefCell::new(Some(T::default())),

    fn get_inside_ref<'a>(&'a self) -> &'a T {

I tried a lot of ways,but still can't get rid of dangling references

That's impossible for the same reason you can't have a mapping from RefCell<T> to &T - you must have Ref<'_, T> alive to get a borrow of T inside a RefCell, otherwise it'd be unchecked access to protected data[1].

It's possible to return Ref<'a, T>, though, like this:

fn get_inside_ref<'a>(&'a self) -> Ref<'a, T> {
    Ref::map(, |optref| optref.as_ref().unwrap())

  1. Well, strictly speaking, there's Ref::leak, but it, as the name suggests, leaks the Ref and holds RefCell immutable borrowed forever. ↩ī¸Ž


Thanks so much.

This topic was automatically closed 90 days after the last reply. We invite you to open a new topic if you have further questions or comments.