let mut x = 1;
let a = &mut x;
let b = &mut *a;
*a = 2; // error. b borrows a
*b = 3; // it works! (only without " *a = 2 ")
let mut x = 1;
let b;
{
let a = &mut x;
b = &mut *a;
} // a drops here
*b = 2; // it works!
我很难理解这&*a
意味着什么lifetime
。我不知道*
运算符如何与变量的生命周期相关。
好像 b 借了 x 也借了 a,所以不仅 x(即 *a) 不能移动或修改,也a
不能使用。
编译器的错误信息是:b 借用了 a。
所以,我运行了第二个代码。据我了解,借来的数据不能重新分配、移动或丢弃。之前我特意做a
了drop b
,以确保它a
的寿命应该比b
's长。
但是,第二个代码仍然有效。
那么,我如何理解与 相关的生命周期&mut *a
?