Rc

Rc — це спільний вказівник із підрахунком посилань. Використовуйте це, коли вам потрібно звернутися до тих самих даних з кількох місць:

use std::rc::Rc;

fn main() {
    let a = Rc::new(10);
    let b = Rc::clone(&a);

    println!("a: {a}");
    println!("b: {b}");
}
  • Дивіться Arc та Mutex, якщо ви працюєте у багатопотоковому контексті.
  • Ви можете понизити спільний вказівник на Weak вказівник, щоб створити цикли, які буде відкинуті.
This slide should take about 5 minutes.
  • Рахунок Rc гарантує, що значення, яке міститься в ньому, буде дійсним до тих пір, поки існують посилання.
  • Rc у Rust схожий на std::shared_ptr у C++.
  • Rc::clone дешевий: він створює вказівник на той самий розділ пам’яті і збільшує кількість посилань. Він не робить глибокого клонування, і, як правило, його можна ігнорувати, шукаючи проблеми з продуктивністю в коді.
  • make_mut насправді клонує внутрішнє значення, якщо необхідно ("clone-on-write") і повертає мутабельне посилання.
  • Використовуйте Rc::strong_count, щоб перевірити кількість посилань.
  • Rc::downgrade дає вам слабкий об'єкт з підрахунком посилань для створення циклів, які будуть відкинуті належним чином (ймовірно, у поєднанні з RefCell).