Moved Strings in Rust

fn main() {
    let s1: String = String::from("Rust");
    let s2: String = s1;
}
  • s1의 힙 데이터는 s2에서 재사용 됩니다.
  • s1의 스코프가 종료되면 아무일도 일어나지 않습니다.(이미 이동되었습니다.)
  • The heap data from s1 is reused for s2.
  • When s1 goes out of scope, nothing happens (it has been moved from).

s2이동 전 메모리:

Before move to s2:

StackHeaps1Rust44터ptr이len기capacity

s2이동 후 메모리:

After move to s2:

StackHeaps1ptrRustlen4capacity4s2ptrlen4capacity4(inaccessible)

역주

  • 이동 후 메모리 그림에서 s1에서 힙으로 연결이 지워졌다고 이해해도 무방은 합니다. 컴파일러가 확인하기 위해 접근 불가 처리 한 것으로 보이긴 합니다만…