Мое понимание заключается в том, что изменчивый заемщик может перевести право собственности на другого изменчивого заемщика. Но этот ход, похоже, немного отличается от перемещения переменной без указателя. Давайте посмотрим пример. Ниже p1
переходит в p2
, когда compute()
называется в первый раз. Но право собственности возвращается к p1
после того, как compute()
возвращается.Перемещение изменчивого заимствования
fn compute(p2: &mut Point) {
}
fn reset(p1: &mut Point) {
compute(p1); //OK
compute(p1); //OK
}
Это отличается от того, как перемещается регулярная переменная.
fn compute(p2: Point) {
}
fn reset(p1: Point) {
compute(p1); //OK
compute(p1); //Compile error
}
Теперь собственность не вернуться к p1
после первых compute()
возвращения вызова.
Оба поведения понятны и желательны по многим причинам. Но я просто хотел подтвердить свое понимание, что эти два движения несколько отличаются по своей природе. Правильно ли я так думаю?
«изменяемый заемщик может перейти в собственность к другому изменяемым заемщика» - на мой взгляд, вы либо * собственный * объект или * заимствуют * один, там нет концепция «заемного владения». – Shepmaster
@Shepmaster, ссылки являются регулярными значениями, и они также являются субъектами правил владения. Без reborrowing '& mut' будет вести себя точно так же, как и другие типы noncopyable (т. Е. Они могут быть перемещены только). –