[Rust] unsafe: Box에서 포인터 꺼내쓰기
이전 포스트
https://m.blog.naver.com/sssang97/221660436556
이번엔 Box나 Rc같은 관리형 스마트 포인터 객체에서 raw 포인터를 강제로 추출해서 다루는 법을 정리해보겠다.
당연히 위험한 짓들이고, 꼭 필요한 상황이 아니라면 쓰지 않는게 좋다.
1. 제어권은 냅두고 포인터만 뽑아쓰기
이 방법을 사용하면 할당/해제의 제어권은 그대로 둔채로 살아있는 동안에만 제대로 써볼 수 있다.
방법은 간단하다.
역참조(deref)를 하자마자 참조(ref)를 생성해서 포인터로 받기만 하면 된다.

여기서 주의할 점은, 제어권을 가져오지는 않았기 때문에 포인터를 들고있더라도 원본 할당 데이터가 drop되어 해제될 수 있다는 것이다.
타이밍을 고려해야한다.
2. 제어권까지 가져오기
위의 방법은 아무래도 제한이 많고, 진정한 흑마술을 부리고자 한다면 제어권까지 가져와야 한다.
Box::into_raw 함수를 이용하면 기존의 Box에게서 제어권을 강탈하고 자유로운 raw 포인터를 가져올 수 있다.

대신 할당해제도 직접 해줘야한다.
보통은 Box::from_raw로 Box를 다시 씌워서 Box의 drop이 할당해제를 시키도록 유도하는 것 같다.