RUST
https://youtu.be/m76sRj2VgGo
pointer
1. reference
단순히 메모리 주소를 가진다 (값을 빌려옴)
2. smart pointer
pointer 처럼 행동하는 데이터 스트럭쳐이며 추가적인 메타데이터, 기능을 가지고 있다. 실제로 데이터를 가지고 있다. String, Vector가 스마트 포인터의 종류이다
보통 deref, drop trait을 implementing 한다
위 틀린 코드
위 맞는 코드 작성중
https://youtu.be/dYEC6NElVOg
위 맞는 코드
위 틀린코드 (마지막 부분)
위 맞는 코드
Deref
위 틀린 코드 Deref trait을 implement 해야 한다
위 실제로 작동하는 내용을 자세하게 보여줌. 사실 컴파일러가 줄여서 *y 만으로도 작동하게 도와준다
&String => &str 로 자동 변환된다. deref coercian 이라고 하고 규칙은 아래와 같다. mutable type을 deref하려는 경우는 DerefMut을 사용한다
Drop
https://youtu.be/RPWZcTYBS4k
smart pointer 는 Deref , Drop trait을 implement 해야한다.
아래는 Drop trait implementing하는 법을 보여주고 있다.
아래와 같이 smart pointer struct를 통해 drop을 호출하는 것은 금지
standard library의 drop을 통해 memory에서 없애는 것은 가
Rc
https://youtu.be/M9Owp3iLigg
위는 한번 a의 오너쉽이 Box::new()에 전달되었는데 밑에서 또 사용하려고 하기 때문에 잘못된 코드
위는 올바른 코드
위는 약간 변형된 형태로 똑같은 효과를 가진다
아래는 결과
interior mutability
https://youtu.be/77aRH6YBKyY
위에서 &mut a;가 잘못된 이유는 애초에 a는 immutable이기 때문이다
위에서*d = 20;이 잘못된 이유는 애초에 &mut으로 하지 않았기 때문이다


















