星期六, 10月 28, 2023

Rust 的基礎 - Copy, Clone

所有權規則 那篇中,談到了

 

let hello = "Hello World".to_string()

let hello2 = hello;

 

在 Ownership 規則之下, hello 所持有的 Value 被移轉給 hello2,因此 hello 之後無法被使用。

這種規則可以止諸如 Dangling pointer, Use After Free 等。但想阻止這些情況除了 Move,其實也可以選擇複製。


let hello2 = hello.clone();


使用 clone 的話,hello 與 hello2 就各自持有單獨的一份 "Hello World"


此外對於一些基礎型別(如整數,浮點數)來說,它們在使用 = 時,行為就不是 Move 而是 Clone


let value = 123;

let value2 = value;

println!("{} {}", value, value2);

// value, value2 都有效


在 Rust 中,支援 Clone 的型別就有 clone 可用,支援 Copy 的型別遇到 = 時就是使用 clone。

沒有留言: