diff --git a/rustbook-ru/src/ch15-06-reference-cycles.md b/rustbook-ru/src/ch15-06-reference-cycles.md index 7d76903f..77302210 100644 --- a/rustbook-ru/src/ch15-06-reference-cycles.md +++ b/rustbook-ru/src/ch15-06-reference-cycles.md @@ -52,7 +52,7 @@ ### Предотвращение ссылочной зацикленности: замена умного указателя `Rc` на `Weak` -So far, we’ve demonstrated that calling `Rc::clone` increases the `strong_count` of an `Rc` instance, and an `Rc` instance is only cleaned up if its `strong_count` is 0. You can also create a *weak reference* to the value within an `Rc` instance by calling `Rc::downgrade` and passing a reference to the `Rc`. Strong references are how you can share ownership of an `Rc` instance. Weak references don’t express an ownership relationship, and their count doesn’t affect when an `Rc` instance is cleaned up. They won’t cause a reference cycle because any cycle involving some weak references will be broken once the strong reference count of values involved is 0. +До сих пор мы демонстрировали, что вызов `Rc::clone` увеличивает `strong_count` экземпляра `Rc`, а экземпляр `Rc` удаляется, только если его `strong_count` равен 0. Вы также можете создать *слабую ссылку* на значение внутри экземпляра `Rc`, вызвав `Rc::downgrade` и передав ссылку на `Rc`. Сильные ссылки - это то с помощью чего вы можете поделиться владением экземпляра `Rc`. Слабые ссылки не отражают связи владения, и их подсчёт не влияет на то, когда экземпляр `Rc` будет очищен. Они не приведут к ссылочному циклу, потому что любой цикл, включающий несколько слабых ссылок, будет разорван, как только количество сильных ссылок для задействованных значений станет равным 0. Когда вы вызываете `Rc::downgrade`, вы получаете умный указатель типа `Weak`. Вместо того чтобы увеличить `strong_count` в экземпляре `Rc` на 1, вызов `Rc::downgrade` увеличивает `weak_count` на 1. Тип `Rc` использует `weak_count` для отслеживания количества существующих ссылок `Weak`, аналогично `strong_count`. Разница в том, что `weak_count` не должен быть равен 0, чтобы экземпляр `Rc` мог быть удалён. @@ -157,3 +157,5 @@ children: RefCell { value: [] } }] } }) Если эта глава вызвала у вас интерес и вы хотите реализовать свои собственные умные указатели, обратитесь к ["The Rustonomicon"](https://doc.rust-lang.org/nomicon/index.html) за более полезной информацией. Далее мы поговорим о параллелизме в Rust. Вы даже узнаете о нескольких новых умных указателях. + +