gpt4 book ai didi

rust - 为什么 `Arc>`自动获得静态生命周期?

转载 作者:行者123 更新时间:2023-12-03 11:33:53 24 4
gpt4 key购买 nike

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

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<Mutex<dyn MyTrait>>具有静态生存期?

最佳答案

我们知道struct Stream没有附加任何生存期,因此对其生存期没有限制。
在最坏的情况下,Stream的生存期为'static,并且由于其所有字段必须持续这么长的时间,因此dyn Renderer必须始终假定此最坏的情况为真。
但是,我们可以为Stream添加一个显式生存期,以指示其生存期仅限于dyn Renderer。这样,编译器知道它们必须具有相同的生存期,并将其正确匹配到您的用例。

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

关于rust - 为什么 `Arc<Mutex<dyn MyTrait>>`自动获得静态生命周期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64254320/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com