动态调度的 &dyn Trait 和 Box<dyn Trait> 有什么区别?

Ale*_*aev 7 dynamic-dispatch rust

使用不同的模式运行new_foo1new_foo2返回相同的特征Foonew_foo1除了更冗长之外,我没有看到它们之间有任何功能差异。两者之间有优选的方式吗?这两种模式有什么微妙的影响吗?

trait Foo {
    fn bar(&self);
}

struct FooIm {}

impl Foo for FooIm {
    fn bar(&self) {
        println!("bar from FooIm")
    }
}

fn new_foo1<'a>() -> &'a (dyn Foo + 'a) {
    &FooIm {}
}

fn new_foo2() -> Box<dyn Foo> {
    let f = FooIm {};
    Box::new(f)
}

fn main() {
    let f1 = new_foo1();
    let f2 = new_foo2();

    f1.bar();
    f2.bar();
}
Run Code Online (Sandbox Code Playgroud)

归档时间:

查看次数:

5735 次

最近记录:

5 年,5 月 前