Skip to content
เข้าสู่ระบบ

Smart Pointer Structs

Box, Rc, Arc และอื่นๆ

fn main() {
// Box - heap allocation
let boxed = Box::new(42);
println!("Boxed: {}", boxed);
// Deref
let value: i32 = *boxed;
println!("Unboxed: {}", value);
// Recursive types need Box
#[derive(Debug)]
enum List {
Cons(i32, Box<List>),
Nil,
}
let list = List::Cons(1,
Box::new(List::Cons(2,
Box::new(List::Cons(3,
Box::new(List::Nil))))));
println!("List: {:?}", list);
// Box for trait objects
trait Animal {
fn speak(&self) -> &str;
}
struct Dog;
impl Animal for Dog {
fn speak(&self) -> &str { "woof" }
}
let animal: Box<dyn Animal> = Box::new(Dog);
println!("Animal says: {}", animal.speak());
// Box::leak for 'static
let leaked: &'static str = Box::leak(String::from("forever").into_boxed_str());
println!("Leaked: {}", leaked);
}

เข้าสู่ระบบเพื่อดูเนื้อหาเต็ม

ยืนยันตัวตนด้วยบัญชี Google เพื่อปลดล็อกบทความทั้งหมด