I mean, if you return an immutable reference, the owner in fact cannot mutate it until that reference is dropped.
If you in fact return e.g. an Rc::new(thing) or Arc::new(thing), that's forever (though of course you can unwrap the last reference!)
> I mean, if you return an immutable reference, the owner in fact cannot mutate it until that reference is dropped.
Might be worth noting that "dropped" in this context doesn't necessarily correspond to the reference going out of scope:
fn get_first(v: &Vec<i32>) -> &i32 { &v[0] } fn main() { let mut v = vec![0, 1, 2]; let first = get_first(&v); print!("{}", first}); v.push(3); // Works! // print!("{}", first); // Doesn't work }
> I mean, if you return an immutable reference, the owner in fact cannot mutate it until that reference is dropped.
Might be worth noting that "dropped" in this context doesn't necessarily correspond to the reference going out of scope: