Rc clone은 데이터를 복사하지 않고 소유자 수만 늘린다
Rc::clone은 리스트 a를 b와 c가 공유하도록 만들며, strong_count는
공유 소유자가 생기고 사라지는 순간을 숫자로 보여준다.
a
Rc::new 뒤 count는 1이다.
b
Rc::clone(&a)로 count가 2가 된다.
c scope
안쪽 스코프에서 3이 되고, 벗어나면 다시 2가 된다.
Rc new
공유 대상 생성
리스트 꼬리 a가 힙에 놓이고 소유자 하나가 생긴다.
clone b
참조 카운트 증가
데이터 깊은 복사 없이 같은 값을 가리키는 소유자가 추가된다.
clone c
스코프 안에서 임시 공유
c가 살아 있는 동안 strong_count는 하나 더 커진다.
drop c
스코프 종료로 감소
c가 사라지면 카운트가 줄고 마지막 소유자가 사라질 때 데이터가
정리된다.
| 호출 | 비용 | 읽는 법 |
|---|---|---|
| Rc::clone | 참조 카운트만 증가하므로 가볍다. | 공유 소유권을 늘리는 의도를 드러낸다. |
| a.clone | 동작은 같지만 일반 clone처럼 보일 수 있다. | 깊은 복사와 헷갈릴 여지가 있다. |
| strong_count | 런타임 소유자 수를 관찰한다. | 스코프와 drop이 카운트에 미치는 영향을 확인한다. |
공유 소유권
여러 값이 같은 데이터를 읽어야 할 때 Rc가 소유자 수를 관리한다.
깊은 복사 아님
Rc::clone은 데이터 복제 비용을 만들지 않는다.
스코프가 기준
소유자가 스코프를 벗어나면 카운트가 줄어든다.