РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
844 of 1245 menu

Метод 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

Смотрите также

  • класс Arc,
    который представляет потокобезопасный счётчик ссылок
  • метод clone,
    который увеличивает счётчик сильных ссылок
  • класс Weak,
    который представляет слабую ссылку на данные
  • метод upgrade,
    который пытается получить сильную ссылку из слабой
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить