Pointers 为什么对象只能可变地借用一次?

Pointers 为什么对象只能可变地借用一次?,pointers,types,rust,type-systems,Pointers,Types,Rust,Type Systems,是否已经有发送/同步?官方文件只提到它与数据竞争有关。因为内存安全 考虑以下示例(忽略这样一个事实,即如果编译,将导致无限循环): 项是对列表所持有内存的引用;它的类型为&i32。您可以通过取消引用该元素来读取该元素的值(*item) 如果push调用将向量的内存重新分配到不同的地址,那么项中的引用会发生什么情况 然后,引用将包含旧地址。任何访问它的尝试都会涉及读取一些未定义的内存块。这违反了核心防锈安全原则 是否已经有Send/Sync Send和Sync与多个线程有关。从上面的示例可以看出,

是否已经有
发送
/
同步
?官方文件只提到它与数据竞争有关。

因为内存安全

考虑以下示例(忽略这样一个事实,即如果编译,将导致无限循环):

是对
列表
所持有内存的引用;它的类型为
&i32
。您可以通过取消引用该元素来读取该元素的值(
*item

如果
push
调用将向量的内存重新分配到不同的地址,那么
项中的引用会发生什么情况

然后,引用将包含旧地址。任何访问它的尝试都会涉及读取一些未定义的内存块。这违反了核心防锈安全原则

是否已经有
Send
/
Sync


Send
Sync
与多个线程有关。从上面的示例可以看出,您不需要线程来潜在地生成无效引用。

因为内存安全性

考虑以下示例(忽略这样一个事实,即如果编译,将导致无限循环):

是对
列表
所持有内存的引用;它的类型为
&i32
。您可以通过取消引用该元素来读取该元素的值(
*item

如果
push
调用将向量的内存重新分配到不同的地址,那么
项中的引用会发生什么情况

然后,引用将包含旧地址。任何访问它的尝试都会涉及读取一些未定义的内存块。这违反了核心防锈安全原则

是否已经有
Send
/
Sync


Send
Sync
与多个线程有关。从上面的示例中可以看出,不需要线程就可能产生无效引用。

您阅读了吗?第一个(有趣的)示例与数据竞争无关。数据竞争自由实际上主要是作为借用检查基础的混叠异或可变性原理的一种后果;可以说是蛋糕上的樱桃。@MatthieuM。tsk,tsk,链接到旧的、过时的文档。你难道不知道Rust 1.16.0几个小时前就问世了吗?@Shepmaster:唉,晚了几个小时!幸运的是,它完成了
货物检查
!你读过吗?第一个(有趣的)示例与数据竞争无关。数据竞争自由实际上主要是作为借用检查基础的混叠异或可变性原理的一种后果;可以说是蛋糕上的樱桃。@MatthieuM。tsk,tsk,链接到旧的、过时的文档。你难道不知道Rust 1.16.0几个小时前就问世了吗?@Shepmaster:唉,晚了几个小时!幸运的是,它完成了
货物检查
!你能在没有所有权的情况下重新分配吗@盛安安 对要调用
推送
,您只需要
和mut-Vec
。您可以在没有所有权的情况下重新分配吗@盛安安 对要调用
push
,您只需要
和mut-Vec
let mut list = vec![1, 2, 3];
for item in &list {
    list.push(*item + 1);
    println!("item = {}", item);
}