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);
}