【问题标题】:Why an `Arc<Mutex<dyn MyTrait>>` gets automatically the static lifetime?为什么 `Arc<Mutex<dyn MyTrait>>` 会自动获得静态生命周期?
【发布时间】:2020-10-08 00:57:52
【问题描述】:

在这个简单的示例中,renderer 的类型为 std::sync::Arc&lt;std::sync::Mutex&lt;(dyn Renderer + 'static)&gt;&gt;。这对我来说是我的代码现在的一个问题,我不知道为什么会发生。

use std::sync::Arc;
use std::sync::Mutex;

pub type OnConsume = Arc<dyn Fn() -> Option<u32> + Send + Sync>;

pub trait Renderer {
    fn set_on_consume(&mut self, f: OnConsume);
}
pub struct Stream {
    pub renderer: Arc<Mutex<dyn Renderer>>,
}

fn main() {}

为什么Arc&lt;Mutex&lt;dyn MyTrait&gt;&gt; 有静态生命周期?

【问题讨论】:

标签: rust


【解决方案1】:

我们知道结构体Stream 没有附加任何生命周期,因此它的生命周期没有限制。

在最坏的情况下,Stream 的生命周期可能是 'static,并且由于它的所有字段都必须持续这么长时间,dyn Renderer 必须始终假设这种最坏的情况是正确的。

然而,我们可以为Stream 添加一个显式生命周期,以表明它的生命周期被限制为dyn Renderer 的生命周期。这样编译器就知道它们必须具有相同的生命周期,并将其正确匹配到您的用例。

pub struct Stream<'a> {
    pub renderer: Arc<Mutex<dyn Renderer + 'a>>,
}

【讨论】:

    猜你喜欢
    • 2021-08-29
    • 2021-08-05
    • 1970-01-01
    • 2018-08-29
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    相关资源
    最近更新 更多