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

Класс Weak

Класс Weak из модуля std::sync представляет собой слабую ссылку на данные, которые управляются умным указателем Arc. В отличие от Arc, слабая ссылка не увеличивает счетчик сильных ссылок и не препятствует освобождению памяти. Это позволяет избежать циклических зависимостей, которые приводили бы к утечкам памяти.

Слабая ссылка создается методом downgrade у экземпляра Arc. Чтобы получить доступ к данным через Weak, необходимо вызвать метод upgrade, который возвращает Option<Arc<T>>. Если все сильные ссылки уже уничтожены, метод вернет None.

Синтаксис

use std::sync::{Arc, Weak}; let arc: Arc<T> = Arc::new(value); let weak: Weak<T> = Arc::downgrade(&arc);

Пример

Давайте создадим сильную ссылку Arc и получим из нее слабую ссылку Weak, а затем попробуем получить доступ к данным через метод upgrade:

use std::sync::{Arc, Weak}; fn main() { let arc = Arc::new(12345); let weak: Weak<i32> = Arc::downgrade(&arc); match weak.upgrade() { Some(value) => println!("{}", value), None => println!("value has been dropped"), } }

Результат выполнения кода:

12345

Пример

Давайте убедимся, что после уничтожения сильной ссылки метод upgrade возвращает None:

use std::sync::{Arc, Weak}; fn main() { let arc = Arc::new("abcde"); let weak: Weak<&str> = Arc::downgrade(&arc); drop(arc); match weak.upgrade() { Some(value) => println!("{}", value), None => println!("value has been dropped"), } }

Результат выполнения кода:

value has been dropped

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

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