Необходимо указать два срока жизни:
- Ваш вектор содержит ссылку на элементы.
- Каждый элемент содержит ссылку на своего владельца.
Вам необходимо указать, как долго живет каждый тип ссылки.Если вы пишете Vec<&'a Item<'b>>
, первое время жизни ('a
) указывает, как долго живут ссылки на элементы, а второе время жизни ('b
) указывает, как долго живут ссылки на владельцев.
Когда вы пишетеVec<Item<'a>>
, компилятор не знает, как долго живут элементы.
Когда вы пишете Vec<&a Item>
, компилятор не знает, как долго живут владельцы.
Когда вы используетеОдинаковое время жизни в обоих точках (Vec<&'a Item<'a>>
), вы говорите компилятору, что оба времени жизни одинаковы, что означает, что элементы должны жить ровно столько же времени, сколько их владельцы.Это может быть чрезмерно ограничительным, в зависимости от вашего варианта использования может быть лучше сообщить компилятору, что элементы не могут жить дольше, чем их владельцы:
pub struct Shelf<'a, 'b: 'a> {
items: Vec<&'b Item<'a>>,
}