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
).