Метод strong_count
Метод strong_count возвращает число сильных
ссылок (владельцев) на данные, которые хранятся
в умном указателе Rc. Каждый вызов метода
clone увеличивает счётчик сильных ссылок на
единицу, а каждое удаление клона уменьшает его.
Метод не принимает параметров и возвращает значение
типа usize. Важно понимать, что счётчик
отражает именно сильные ссылки, и когда он достигает
нуля, данные освобождаются.
Синтаксис
Rc::strong_count(&rc)
Пример
Давайте создадим Rc и посмотрим, как
меняется количество сильных ссылок при клонировании:
use std::rc::Rc;
fn main()
{
let rc = Rc::new("abcde");
println!("{}", Rc::strong_count(&rc));
let rc2 = Rc::clone(&rc);
println!("{}", Rc::strong_count(&rc));
let rc3 = Rc::clone(&rc);
println!("{}", Rc::strong_count(&rc));
}
Результат выполнения кода:
1
2
3
Пример
Давайте проверим, как уменьшается счётчик сильных ссылок при удалении клонов:
use std::rc::Rc;
fn main()
{
let rc = Rc::new("12345");
let rc2 = Rc::clone(&rc);
println!("{}", Rc::strong_count(&rc));
drop(rc2);
println!("{}", Rc::strong_count(&rc));
}
Результат выполнения кода:
2
1
Пример
Давайте посмотрим, как счётчик сильных ссылок ведёт себя, когда все клоны выходят из области видимости:
use std::rc::Rc;
fn main()
{
let rc = Rc::new("abcde");
{
let rc2 = Rc::clone(&rc);
let rc3 = Rc::clone(&rc);
println!("{}", Rc::strong_count(&rc));
}
println!("{}", Rc::strong_count(&rc));
}
Результат выполнения кода:
3
1
Смотрите также
-
класс
Rc,
который представляет умный указатель с подсчётом ссылок -
метод
new,
который создаёт новый экземпляр Rc -
метод
clone,
который увеличивает количество сильных ссылок -
метод
strong_count,
который возвращает количество сильных ссылок