diff --git a/rustbook-ru/src/ch15-04-rc.md b/rustbook-ru/src/ch15-04-rc.md index 107d3bb2c..393704658 100644 --- a/rustbook-ru/src/ch15-04-rc.md +++ b/rustbook-ru/src/ch15-04-rc.md @@ -50,7 +50,7 @@ Листинг 15-18: Определение List, использующее Rc<T> -Нам нужно добавить оператор `use`, чтобы подключить тип `Rc` в область видимости, потому что он не входит в список автоматического импорта прелюдии. В `main`, мы создаём список владеющий 5 и 10, сохраняем его в новом `Rc` переменной `a`. Затем при создании `b` и `c`, мы называем функцию `Rc::clone` и передаём ей ссылку на `Rc` как аргумент `a`. +Нам нужно добавить инструкцию `use`, чтобы подключить тип `Rc` в область видимости, потому что он не входит в список автоматического импорта прелюдии. В `main`, мы создаём список владеющий 5 и 10, сохраняем его в новом `Rc` переменной `a`. Затем при создании `b` и `c`, мы называем функцию `Rc::clone` и передаём ей ссылку на `Rc` как аргумент `a`. Мы могли бы вызвать `a.clone()`, а не `Rc::clone(&a)`, но в Rust принято использовать `Rc::clone` в таком случае. Внутренняя реализация `Rc::clone` не делает глубокого копирования всех данных, как это происходит в типах большинства реализаций `clone`. Вызов `Rc::clone` только увеличивает счётчик ссылок, что не занимает много времени. Глубокое копирование данных может занимать много времени. Используя `Rc::clone` для подсчёта ссылок, можно визуально различать виды клонирования с глубоким копированием и клонирования, которые увеличивают количество ссылок. При поиске в коде проблем с производительностью нужно рассмотреть только клонирование с глубоким копированием и игнорировать вызовы `Rc::clone` .