Имам два обекта, при които вторият изисква първият да го надживее, защото съдържа препратка към първия. Трябва да ги преместя и двата в нишка, но компилаторът се оплаква, че първият не живее достатъчно дълго. Ето кода:
use std::thread;
trait Facade: Sync {
fn add(&self) -> u32;
}
struct RoutingNode<'a> {
facade: &'a (Facade + 'a),
}
impl<'a> RoutingNode<'a> {
fn new(facade: &'a Facade) -> RoutingNode<'a> {
RoutingNode { facade: facade }
}
}
fn main() {
struct MyFacade;
impl Facade for MyFacade {
fn add(&self) -> u32 {
999u32
}
}
let facade = MyFacade;
let routing = RoutingNode::new(&facade);
let t = thread::spawn(move || {
let f = facade;
let r = routing;
});
t.join();
}
И грешката:
error: `facade` does not live long enough
--> <anon>:27:37
|
27 | let routing = RoutingNode::new(&facade);
| ^^^^^^ does not live long enough
...
35 | }
| - borrowed value only lives until here
|
= note: borrowed value must be valid for the static lifetime...
Вярвам, че разбирам какво ми казва грешката: че след като обектът facade
бъде преместен в нишката, препратката вече няма да е валидна. Но не успях да намеря работещо решение на този проблем, предполагайки, че бих искал да запазя структурите непокътнати.