移動語意
An assignment will transfer ownership between variables:
fn main() { let s1: String = String::from("Hello!"); let s2: String = s1; println!("s2: {s2}"); // println!("s1: {s1}"); }
- 將
s1
指派給s2
會轉移所有權。 - When
s1
goes out of scope, nothing happens: it does not own anything. - 當
s2
超出範圍時,系統會釋放字串資料。 - 一律「只有」一個變數綁定會擁有值。
-
請說明這與 C++ 中的預設情形相反:您必須使用
std::move
,且已定義移動建構函式,系統才會根據值進行複製。 -
只有擁有權才會轉移。是否產生任何機器碼來操控資料本身是一個最優化問題,而系統會主動將這些副本最優化。
-
簡單的值 (例如整數) 可標示為
Copy
(請參閱後續投影片)。 -
在 Rust 中,克隆作業皆為明確設定,方法為使用
clone
。