Метод downgrade
Метод downgrade класса Arc создаёт
Weak-указатель на тот же объект, которым
владеет исходный Arc. В отличие от метода
clone, вызов downgrade не увеличивает
счётчик сильных ссылок, поэтому слабая ссылка не
препятствует уничтожению данных. Параметром метод
принимает ссылку на Arc и возвращает значение
типа Weak<T>.
Синтаксис
Arc::downgrade(&arc)
Пример
Давайте создадим Arc и получим на него
слабую ссылку через downgrade:
use std::sync::Arc;
fn main()
{
let arc = Arc::new(5);
let weak = Arc::downgrade(&arc);
println!("{:?}", weak.upgrade());
}
Результат выполнения кода:
Some(5)
Пример
Давайте убедимся, что после уничтожения всех сильных ссылок слабая ссылка перестаёт возвращать значение:
use std::sync::Arc;
fn main()
{
let arc = Arc::new(5);
let weak = Arc::downgrade(&arc);
drop(arc);
println!("{:?}", weak.upgrade());
}
Результат выполнения кода:
None
Пример
Давайте проверим, что downgrade не
увеличивает счётчик сильных ссылок:
use std::sync::Arc;
fn main()
{
let arc = Arc::new(5);
let weak = Arc::downgrade(&arc);
println!("strong = {}", Arc::strong_count(&arc));
println!("weak = {}", Arc::weak_count(&arc));
}
Результат выполнения кода:
strong = 1
weak = 1