R
Size: a a a
R
p
R
Foo<'a>
живут ровно 'a
или не больше 'a
?R
fn dropfoo<'a>(foo: Foo<'a>, bar: Bar<'a>) -> Bar<'a> {
drop(foo);
bar
}
{
let bar = {
let foo = Foo::new();
let bar = Bar::new();
dropfoo(foo, bar)
};
}
R
R
fn foo<'a>(r: &'a i32) {Созданный
let _ = Foo::<'a>::new(r);
}
Foo
живет точно меньше чем ссылка, потому что она снаружи пришлаR
&'a T
жил ровно 'a
то я бы всегда мог создать из него &'a &'a T
R
R
R
p
fn foo<'a>(r: &'a i32) {Созданный
let _ = Foo::<'a>::new(r);
}
Foo
живет точно меньше чем ссылка, потому что она снаружи пришлаR
Foo<'a>
- нетR
Foo<'a>
живет ровно 'a
NM
NM