// Rc and RefCell // https://cs.hofstra.edu/~cscccl/csc123/rust/memleak.rs use std::cell::RefCell; use std::rc::Rc; fn main() { /* let rc:Rc> = Rc::new(RefCell::new(5)); *rc.borrow_mut() += 1; */ /* let mut rc:Rc = Rc::new(5); *rc += 1; let mut rc:Box = Box::new(5); *rc += 1; */ let rc:Rc> = Rc::new(RefCell::new(5)); let borrow = rc.borrow(); *rc.borrow_mut() += 1; println!(" value inside the cell: {}", &borrow); /* let rc:Rc> = Rc::new(RefCell::new(5)); let rc2 = rc.clone(); // rc2 and rc shares the refcell *rc.borrow_mut() += 1; println!("value inside the cell: {}", rc2.borrow()); */ //while true {leak();} }//main struct Node { item : Vec, next : Option>>, } fn leak() { let mut a = Node { item:vec![1,2,3], next: None }; let mut b = Node { item:vec![4,5,6], next: None }; let rca = Rc::new(RefCell::new(a)); let rcb = Rc::new(RefCell::new(b)); rca.borrow_mut().next = Some(rcb.clone()); rcb.borrow_mut().next = Some(rca.clone()); // this creates a cycle and a memory leak }