메모리를 누가 책임지는지 컴파일 때 확정한다
소유권은 런타임 감시가 아니라 값의 주인, 이동, 빌림, 정리 시점을
코드 구조 안에서 고정하는 규칙이다.
값의 생애 판단 순서
1
소유자 지정
각 값은 한 시점에 하나의 주인을 가진다.
2
이동 확인
대입이나 함수 전달 뒤 예전 이름은 무효가 된다.
3
빌림 제한
읽기 공유와 쓰기 단독 규칙을 동시에 만족해야 한다.
4
스코프 종료
주인이 사라질 때 값은 한 번만 정리된다.
| 값을 넘겼는가 | 이동된 값은 다시 사용할 수 없다. 복사가 필요한 값만 예외적으로 남는다. |
|---|---|
| 참조가 살아있는가 | 참조가 유효한 동안 원본을 위험하게 바꾸거나 먼저 없앨 수 없다. |
| 해제 책임이 겹치는가 | 동일 힙 데이터를 둘 이상이 소유하지 못하게 하여 double free를 막는다. |
스택 쪽 값
크기가 고정된 값은 빠르게 복사되거나 그대로 스코프와 함께
사라진다.
힙 쪽 값
String처럼 힙을 쓰는 값은 포인터와 해제 책임의 이동을
함께 본다.