人工智能
872
Rc
大部分情况下所有权是非常明确的:可以准确的知道哪个变量拥有某个值。然而,有些情况单个值可能会有多个所有者。例如,在图数据结构中,多个边可能指向相同的结点,而这个结点从概念上讲为所有指向它的边所拥有。结点直到没有任何边指向它之前都不应该被清理。
为了启用多所有权,Rust 有一个叫做 Rc
例子:
// enum List { // Cons(i32, Box<List>), // Nil, // } // use crate::List::{Cons, Nil}; enum List { Cons(i32, Rc<List>), Nil, } use crate::List::{Cons, Nil}; use std::rc::Rc; fn main() { // let a = Cons(5, Box::new(Cons(10, Box::new(Nil)))); let a = Rc::new(Cons(5, Rc::new(Cons(10, Rc::new(Nil))))); // let b = Cons(3, Box::new(a)); // let b = Cons(3, Rc::clone(&a)); let b = Cons(3, a.clone()); // Rc<T>通过clone来获得新的Rc<T>指针,增加计数 // let c = Cons(4, Box::new(a)); let c = Cons(4, Rc::clone(&a)); }
本节全部源代码:
https://github.com/anonymousGiga/learn_rust/blob/master/learn_rc1/src/main.rs