8장 정리 (재상)
- 참조(포인터)는 데이터의 존재(메모리 주소)를 가리킨다.
참조가 데이터보다 오래 살아남으면 dangling pointer
(해제되어 메모리 권한을 초과하거나, 재할당된 잘못된 값을 가리키거나)
- 기존 참조는 말하자면 raw pointer
*const T
: unmutable pointer / *mut T
: mutable pointer
raw pointer를 usize로 변환하면 실제 가상주소 값을 얻어올 수도 있다.
- dereference:
*a
주소를 가리키는 값에서 그 주소의 값으로 해석하는 것
(예시 개더럽다 저런거 누가 쓰니…)
- 멤버 변수 접근은 golang와 같은 방식으로
.
으로 한다.
C/C++처럼 포인터 여부에 따라 .
이냐 ->
냐 구분하지 않아도 된다.
- 스마트 포인터:
Deref
DerefMut
Drop
trait을 구현함.
struct의 deref, 멤버 접근에 대한 코드 후킹
- raw pointer를 deref로 변환할 때 위험해서 unsafe가 필요…
이게 뭔소리여…