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