Zum Inhalt springen

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.


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.