为了说明 的必要性Rc<T>,本书提供了以下代码片段(剧透:它不会编译)来表明,如果没有Rc<T>.
enum List {\n Cons(i32, Box<List>),\n Nil,\n}\n\nuse crate::List::{Cons, Nil};\n\nfn main() {\n let a = Cons(5, Box::new(Cons(10, Box::new(Nil))));\n let b = Cons(3, Box::new(a));\n let c = Cons(4, Box::new(a));\n}\nRun Code Online (Sandbox Code Playgroud)\n然后它声称(强调我的)
\n\n\n我们可以更改 的定义来
\nCons保存引用,但随后我们必须指定生命周期参数。通过指定生命周期参数,我们将指定列表中的每个元素的生存时间至少与整个列表一样长。例如,借用检查器不会让我们进行编译,因为在 a 可以引用它之前,临时值将被删除。let a = Cons(10, &Nil);Nil
嗯,不完全是。以下代码片段在下编译rustc 1.52.1
enum List<\'a> {\n Cons(i32, &\'a List<\'a>),\n Nil,\n}\n\nuse crate::List::{Cons, Nil};\n\nfn main() {\n let a = Cons(5, &Cons(10, &Nil));\n let b = Cons(3, …Run Code Online (Sandbox Code Playgroud)