Rust中的Dyn引用VS Boxed Dyn引用?[副本]

u3r8eeie  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(156)

此问题在此处已有答案

Why is it discouraged to accept a reference &String, &Vec, or &Box as a function argument?(4个答案)
12天前关门了。
我正在学习Rust中的Dyn Traits。我看到有两个使用它的选项
1.框(& B)
1.&dyn TraitName
什么时候应该使用第一个,什么时候应该使用第二个?
我没有看到我的代码中的显着差异(process_animalprocess_animal_box函数)

我的密码

struct Cat {}
struct Dog {}

trait Animal {
    fn say(&self);
}

impl Animal for Cat {
    fn say(&self) {
        println!("Meow!!!");
    }
}

impl Animal for Dog {
    fn say(&self) {
        println!("Woow!");
    }
}

fn process_animal(animal: &dyn Animal) {
    animal.say();
}

fn process_animal_box(animal: &Box<dyn Animal>) {
    animal.as_ref().say();
}

fn main() {
    let cat = Cat {};
    process_animal(&cat);
    
    let dog: Box<dyn Animal> = Box::new(Dog {});
    process_animal_box(&dog);
}

字符串

xriantvc

xriantvc1#

Box<T>可以被重新借用到&T中,因此您几乎不需要将&Box<T>作为参数,类似于&str&String的指导原则
只要您需要所有权,就使用Box<T>(注意没有&)。

相关问题