Skip to content

Mutable reference is a non Copy type

https://cotigao.medium.com/mutable-reference-in-rust-995320366e22

mutable reference cannot outlive#

다음 코드의 scope가 벗어나게되면 x가 해제되고 y는 dangling pointer가 되게 된다. 따라서 컴파일 에러가 발생한다.

let mut i = 1;
let j = {
    let x = &mut i;
    let y = &x;
    &**y
};

immutable reference COPIED out#

단지 불변 레퍼런스로 바꿨을 뿐인데 컴파일이 잘 된다. 이유로는 x가 단순히 y에 복사되어 들어가기 때문에 x가 소멸되어도 y는 i를 제대로 가리킬 수 있는 것이다.

let mut i = 1;
let j = {
    let x = &i;
    let y = &x;
    &**y
};