С учетом этого кода:
struct RefWrapper<'a, T> {
r: &'a T,
}
... компилятор жалуется:
ошибка: тип параметра
T
может быть недостаточно длиннымрассмотрим возможность добавления явной привязки времени жизни
T: 'a
, чтобы ссылочный тип&'a T
не переживал данные, на которые он указывает.
Я уже неоднократно видел эту ошибку, и до сих пор я просто слушал компилятор, и все получилось отлично. Однако, думая больше об этом, я не понимаю, зачем мне писать T: 'a
.
Насколько я понимаю, уже невозможно получить такую ссылку. Имея &'a T
, следует, что существует объект типа T
, который живет как минимум 'a
. Но мы не можем хранить ссылки в указанном объекте, которые указывают на данные, имеющие более короткий срок службы, чем 'a
. Это уже привело бы к ошибке компилятора.
В этом смысле уже невозможно получить a &'a T
, где T
не переживает 'a
. Таким образом, дополнительная аннотация (T: 'a
) не нужна.
Я прав? Я ошибаюсь, и если да: как я могу сломать код, если T: 'a
не требуется?
Ссылки: