Skip to content

Instantly share code, notes, and snippets.

@tomoima525
Forked from rust-play/playground.rs
Created September 17, 2021 18:11
Show Gist options
  • Save tomoima525/f5644079cb102e0d2c1ce89596ff544c to your computer and use it in GitHub Desktop.
Save tomoima525/f5644079cb102e0d2c1ce89596ff544c to your computer and use it in GitHub Desktop.
Code shared from the Rust Playground
// use std::cell::RefCell;
// Ownership
use {
std::ops::Drop
};
#[derive(Debug)]
struct Parent(usize, Child, Child);
#[derive(Debug)]
struct Child(usize);
impl Drop for Parent {
fn drop(&mut self) {
println!("Dropping {:?}", self);
}
}
impl Drop for Child {
fn drop(&mut self) {
println!("Dropping {:?}", self);
}
}
fn main() {
//let mut rc1 = Rc::new(Child(1));
let p1 = Parent(1, Child(11), Child(12));
{
let p2 = Parent(2, Child(21), Child(22));
println!("a: p1:{:?}, p2:{:?}", p1,p2);
}
println!("b p1:{:?}", p1);
let p3 = Parent(3, Child(31), Child(32));
println!("c: p1:{:?}, p3:{:?}", p1,p3);
// a: p1:Parent(1, Child(11), Child(12)), p2:Parent(2, Child(21), Child(22))
// Dropping Parent(2, Child(21), Child(22))
// Dropping Child(21)
// Dropping Child(22)
// b p1:Parent(1, Child(11), Child(12))
// c: p1:Parent(1, Child(11), Child(12)), p3:Parent(3, Child(31), Child(32))
// Dropping Parent(3, Child(31), Child(32))
// Dropping Child(31)
// Dropping Child(32)
// Dropping Parent(1, Child(11), Child(12))
// Dropping Child(11)
// Dropping Child(12)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment