簡體   English   中英

為什么Rust強制對象只能可變地借用一次?

[英]Why does Rust enforce objects can only be mutably borrowed once?

還沒有Send / Sync嗎? 官方文件只提到它與數據競賽有關。

因為內存安全

考慮以下示例(忽略編譯后將導致無限循環的事實):

let mut list = vec![1, 2, 3];
for item in &list {
    list.push(*item + 1);
    println!("item = {}", item);
}

item是對list保存的內存的引用; 它是&i32類型。 您可以通過取消引用( *item )來讀取該元素的值。

如果push調用將向量的內存重新分配到其他地址,則item的引用會發生什么情況?

然后,引用將包含地址。 任何訪問它的嘗試都將涉及讀取一些未定義的內存。 這違反了Rust的核心安全原則。

還沒有Send / Sync

SendSync與多個線程有關。 從上面的示例中可以看到,不需要線程即可潛在地產生無效的引用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM