struct Droppable {
name: &'static str, // '
}
impl Drop for Droppable {
fn drop(&mut self) {
println!("> Dropping {}", self.name);
}
}
use std::fmt;
impl fmt::Display for Droppable {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{}", self.name)
}
}
impl fmt::Debug for Droppable {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{}", self.name)
}
}
impl Clone for Droppable {
fn clone(&self) -> Droppable { Droppable {name: self.name}}
}
fn main() {
{
let mut v = Vec::new();
let a = Box::new(Droppable {name: "B"});
v.push(Box::clone(&a));
v.push(Box::clone(&a));
v.push(a);
println!("{:?}", v);
}
{
use std::rc::Rc;
let mut v = Vec::new();
let a = Rc::new(Droppable {name: "R"});
v.push(Rc::clone(&a));
v.push(Rc::clone(&a));
v.push(a);
println!("{:?}", v);
}
}
c3RydWN0IERyb3BwYWJsZSB7CiAgICBuYW1lOiAmJ3N0YXRpYyBzdHIsIC8vICcKfQppbXBsIERyb3AgZm9yIERyb3BwYWJsZSB7CiAgICBmbiBkcm9wKCZtdXQgc2VsZikgewogICAgICAgIHByaW50bG4hKCI+IERyb3BwaW5nIHt9Iiwgc2VsZi5uYW1lKTsKICAgIH0KfQp1c2Ugc3RkOjpmbXQ7CmltcGwgZm10OjpEaXNwbGF5IGZvciBEcm9wcGFibGUgewogICAgZm4gZm10KCZzZWxmLCBmOiAmbXV0IGZtdDo6Rm9ybWF0dGVyKSAtPiBmbXQ6OlJlc3VsdCB7CiAgICAgICAgd3JpdGUhKGYsICJ7fSIsIHNlbGYubmFtZSkKICAgIH0KfQppbXBsIGZtdDo6RGVidWcgZm9yIERyb3BwYWJsZSB7CiAgICBmbiBmbXQoJnNlbGYsIGY6ICZtdXQgZm10OjpGb3JtYXR0ZXIpIC0+IGZtdDo6UmVzdWx0IHsKICAgICAgICB3cml0ZSEoZiwgInt9Iiwgc2VsZi5uYW1lKQogICAgfQp9CmltcGwgQ2xvbmUgZm9yIERyb3BwYWJsZSB7CiAgICBmbiBjbG9uZSgmc2VsZikgLT4gRHJvcHBhYmxlIHsgRHJvcHBhYmxlIHtuYW1lOiBzZWxmLm5hbWV9fQp9CmZuIG1haW4oKSB7CiAgICB7CiAgICAgICAgbGV0IG11dCB2ID0gVmVjOjpuZXcoKTsKICAgICAgICBsZXQgYSA9IEJveDo6bmV3KERyb3BwYWJsZSB7bmFtZTogIkIifSk7CiAgICAgICAgdi5wdXNoKEJveDo6Y2xvbmUoJmEpKTsKICAgICAgICB2LnB1c2goQm94OjpjbG9uZSgmYSkpOwogICAgICAgIHYucHVzaChhKTsKICAgICAgICBwcmludGxuISgiezo/fSIsIHYpOwogICAgfQogICAgewogICAgICAgIHVzZSBzdGQ6OnJjOjpSYzsKICAgICAgICBsZXQgbXV0IHYgPSBWZWM6Om5ldygpOwogICAgICAgIGxldCBhID0gUmM6Om5ldyhEcm9wcGFibGUge25hbWU6ICJSIn0pOwogICAgICAgIHYucHVzaChSYzo6Y2xvbmUoJmEpKTsKICAgICAgICB2LnB1c2goUmM6OmNsb25lKCZhKSk7CiAgICAgICAgdi5wdXNoKGEpOwogICAgICAgIHByaW50bG4hKCJ7Oj99Iiwgdik7CiAgICB9Cn0K