示例程式:
fn main() ", s1);
}
執行這段程式會報錯,報錯資訊如下:
error[e0382]: borrow of moved value: `s1`
--> src\main.rs:4:25
|2 | let s1 = string::from("yuyoubei");
| -- move occurs because `s1` has type `string`, which does not implement the `copy` trait
3 | let s2 = s1;
| -- value moved here
4 | println!("s1 = {}", s1);
| ^^ value borrowed here after move
原因是由於string的儲存形式,它的ptr指標指向了儲存在堆記憶體上的字串。而rust不會顯式地拷貝堆記憶體上的內容。取而代之的是使用移動(move),將s1的內容轉給了s2。
這就避免了乙個二次釋放的問題,因為將 s1 的內容移動給 s2 之後,s1 便已廢棄,只有 s2 有效,所以也就只有 s2 在離開自己的作用域時會釋放空間,就不會造成二次釋放了。
Rust中變數的複製與Copy trait
示例程式 fn main y x,y 輸出 x 123,y 123 上述程式中,在建立變數 y 之後,變數 x 繼續有效。而不會想 string 的賦值一樣發生移動 這是因為對於包括整型在內的一些型別來說,在編譯時可以得知自己的大小,並且能夠將自己的資料完整地儲存在棧記憶體中。因為資料的拷貝全部發生...
rust的綠卡 rust中的Pin詳解
rust中的pin詳解 相關概念 pin這是乙個struct,作用就是將p所指向的t在記憶體中固定住,不能移動。說白一些,就是不能通過safe 拿到 mut t。pin定義如下 pub struct pin pointer p,unpin 這是乙個trait,定義在std marker中,如果乙個t...
rust中的型別
rust提供了幾種機制來實現基本型別和使用者自定義型別的轉換和定義。rust中沒有提供基本型別之間隱式地型別的轉換。但是,我們可以通過as關鍵字來進行顯示型別的轉換。在rust中,數字型別的轉換和c語言中的轉換一樣,除了c語言中的未定義的行為。整數型別之間的所有轉換情況都已經在rust中定義好了。禁...