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

Метод try_unwrap

Метод try_unwrap класса Arc пытается извлечь значение из умного указателя, если на него больше нет других ссылок. Он возвращает результат типа Result: вариант Ok с извлечённым значением, если счётчик ссылок равен единице, или вариант Err с тем же указателем Arc, если ссылок больше одной.

Метод не принимает параметров и потребляет исходный указатель Arc.

Синтаксис

Arc::try_unwrap(this)

Пример

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

use std::sync::Arc; fn main() { let arc = Arc::new(12345); let res = Arc::try_unwrap(arc); match res { Ok(value) => println!("{}", value), Err(_) => println!("has multiple references"), } }

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

12345

Пример

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

use std::sync::Arc; fn main() { let arc = Arc::new("abcde"); let arc2 = Arc::clone(&arc); let res = Arc::try_unwrap(arc); match res { Ok(value) => println!("{}", value), Err(_) => println!("has multiple references"), } println!("{}", arc2); }

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

has multiple references "abcde"

Пример

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

use std::sync::Arc; fn main() { let arc = Arc::new(12345); let arc2 = Arc::clone(&arc); drop(arc2); let res = Arc::try_unwrap(arc); match res { Ok(value) => println!("{}", value), Err(_) => println!("has multiple references"), } }

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

12345

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

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