给定以下代码:
struct RefWrapper<'a, T> {
r: &'a T,
}
当编译器出现以下错误时:
error: the parameter type
T
may not live long enoughconsider adding an explicit lifetime bound
T: 'a
so that the reference type&'a T
does not outlive the data it points at.
我已经多次看到这个错误,到目前为止,我只是听从了编译器的指示,一切都顺利完成。然而,仔细思考后,我不明白为什么我要写 T: 'a
。
就我所理解的而言,已经无法获得这样的引用了。拥有 &'a T
意味着至少有一个类型为 T
的对象存在,它的寿命至少为 'a
。但我们不能在该对象中存储任何指向数据的引用,其生命周期短于 'a
。这将导致编译器错误。
从这个意义上说,已经无法获得 &'a T
,其中 T
不会超过 'a
的寿命。因此,附加的注释 (T: 'a
) 不应该是必需的。
我是对的吗? 如果我错了,那么我该如何破坏代码,如果不需要 T: 'a
?
链接:
T: 'a
的要求,这段代码 就会出问题。但是我现在还不太理解那段代码,所以暂时放弃尝试。希望能有了解该问题的人在此期间回答 ^_^ - Lukas Kalbertodt