Move Semantics

(๋ณ€์ˆ˜์˜)ํ• ๋‹น์€ ๋ณ€์ˆ˜ ๊ฐ„ ์†Œ์œ ๊ถŒ์„ ์ด๋™์‹œํ‚ต๋‹ˆ๋‹ค:

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์— ํ• ๋‹นํ•˜์—ฌ ์†Œ์œ ๊ถŒ์„ ์ด์ „์‹œํ‚ต๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ๋Š” s1์—์„œ _์ด๋™_๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ s1์€ ๋”์ด์ƒ ์ ‘๊ทผ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • s1์˜ ์Šค์ฝ”ํ”„๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ์•„๋ฌด ์ผ๋„ ์—†์Šต๋‹ˆ๋‹ค: ์•„๋ฌด๋Ÿฐ ์†Œ์œ ๊ถŒ์ด ์—†์Šต๋‹ˆ๋‹ค.
  • s2์˜ ์Šค์ฝ”ํ”„๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ๋ฌธ์ž์—ด ๋ฐ์ดํ„ฐ๋Š” ํ•ด์ œ๋ฉ๋‹ˆ๋‹ค.
  • ๊ฐ’(๋ฐ์ดํ„ฐ)์˜ ์†Œ์œ ๊ถŒ์„ ๊ฐ–๋Š” ๋ณ€์ˆ˜๋Š” ํ•ญ์ƒ ์ •ํ™•ํžˆ ํ•˜๋‚˜ ์ž…๋‹ˆ๋‹ค.
  • The assignment of s1 to s2 transfers ownership.
  • The data was moved from s1 and s1 is no longer accessible.
  • When s1 goes out of scope, nothing happens: it has no ownership.
  • When s2 goes out of scope, the string data is freed.
  • There is always exactly one variable binding which owns a value.