Rc
Veränderung von Rc
Abschnitt betitelt „Veränderung von Rc“use std::rc::Rc;fn main() { let n = Rc::new(1); let mut n2 = Rc::clone(&n); *n2 += 1; println!("{}", n);}Daten innerhalb eines Rc können ohne die Verwendung von Interior Mutability (im nächsten Abschnitt behandelt) nicht verändert werden. Rc erzwingt diese Eigenschaft, indem es das Deref -Trait implementiert, aber nicht das DerefMut -Trait.
Rc Drop-Verhalten
Abschnitt betitelt „Rc Drop-Verhalten“use std::rc::Rc;struct Example;impl Drop for Example { fn drop(&mut self) { println!("drop"); }}fn main() { let x = Rc::new(Example); let y = Rc::clone(&x); println!("A"); drop(x); println!("B"); drop(y); println!("C");}Der Wert innerhalb eines Referenz-gezählten Zeigers wird nur einmal gelöscht (gedroppt), daher wird “drop” nur einmal ausgegeben.
Das anfängliche drop(x) dekrementiert den Referenzzähler, löscht den Wert jedoch nicht, da y noch aktiv ist.
Beim Löschen von y wird festgestellt, dass der Referenzzähler 0 ist, und Example wird gelöscht.