У меня есть следующая структура для представления объекта сервера:
pub struct Server {
client_managers: Arc<ClientManager>,
listener: Option<TcpListener>,
}
Вот код, который получает соединение клиента и обрабатывает его в новом потоке:
fn serve(&self) {
for stream in self.listener.as_ref().unwrap().incoming() {
match stream {
Ok(stream) => {
let client_manager = &mut self.client_managers.clone();
// let client_manager = Arc.new(self.client_managers);
thread::spawn(move || {
client_manager.do_something();
});
}
Err(e) => {
println!("connection error: {}", e);
}
}
}
}
Однако , Я получаю следующую ошибку при компиляции:
error[E0716]: temporary value dropped while borrowed
--> server/src/server.rs:37:47
|
37 | let client_manager = &mut self.client_managers.clone();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ creates a temporary which is freed while still in use
38 | // let client_manager = Arc.new(self.client_managers);
39 | / thread::spawn(move || {
40 | | client_manager.nothing();
41 | | });
| |______________________- argument requires that borrow lasts for `'static`
42 | }
| - temporary value is freed at the end of this statement
Я понял, почему эта ошибка произошла. Мой вопрос:
1) Я использую Ar c, следуя некоторым учебникам в Интернете. ( Пример ) Но почему их примеры работают, а не мои?
2) Как я могу исправить эту ошибку в моей ситуации? (Я все еще хочу поделиться объектом client_manager
).