Метод upgrade
Метод upgrade пытается преобразовать слабую ссылку Weak
в сильную ссылку Arc. Он возвращает
Some(Arc), если объект ещё существует,
и None, если объект уже был удалён.
Метод не принимает параметров.
Слабая ссылка Weak не увеличивает счётчик
сильных ссылок, поэтому не мешает освобождению памяти.
Если все сильные ссылки Arc будут уничтожены,
то метод upgrade вернёт None.
Синтаксис
weak.upgrade()
Пример
Давайте создадим сильную ссылку Arc,
получим из неё слабую ссылку Weak
и попробуем восстановить сильную ссылку:
use std::sync::{Arc, Weak};
fn main()
{
let arc = Arc::new(5);
let weak: Weak<i32> = Arc::downgrade(&arc);
let res = weak.upgrade();
match res
{
Some(value) => println!("{}", value),
None => println!("None"),
}
}
Результат выполнения кода:
5
Пример
Давайте создадим слабую ссылку Weak,
затем удалим сильную ссылку Arc
и попробуем восстановить ссылку после удаления:
use std::sync::{Arc, Weak};
fn main()
{
let arc = Arc::new(5);
let weak: Weak<i32> = Arc::downgrade(&arc);
drop(arc);
let res = weak.upgrade();
match res
{
Some(value) => println!("{}", value),
None => println!("None"),
}
}
Результат выполнения кода:
None