rust - 移动可变借用的所有权

标签 rust

我的理解是可变借款人可以将所有权转移给另一个可变借款人。但是这个移动好像和移动一个非指针变量有点不同。让我们看一个例子。当 compute() 第一次被调用时,p1 被移动到 p2。但是在 compute() 返回后,所有权似乎又回到了 p1

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
}

现在,在第一个 compute() 调用返回后,所有权不会恢复到 p1

出于多种原因,这两种行为都是可以理解和需要的。但我只是想确认我的理解,即这两个 Action 在本质上略有不同。我这样想对吗?

最佳答案

你是对的,除了在第一个实例中,引用没有被移动,它只是被重新借用,这是引用特有的行为。也许这会澄清一切,因为它不是移动语义中的异常,而是完全不同的行为。

关于rust - 移动可变借用的所有权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27650188/

相关文章:

generics - 使用泛型取消引用强制

rust - 如何返回结构体中向量的切片

vector - 为什么对同一个向量进行两次哈希运算会得到不同的哈希码?

rust - 如何实现一个允许为字段赋值的过程宏?

rust - 让GtkComboBox条目为Pixbuf或String

rust - 为什么 Rust 允许使用不可变绑定(bind)通过引用字段进行修改?

rust - 使用 serde 将枚举变量的名称作为字符串获取

rust - 自动转发操作,同时保持结果包装

rust - 为什么 Rust 需要 `if let` 语法?

function - 缺少顶级功能的实现