Rc count
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은 데이터 복제 비용을 만들지 않는다.
스코프가 기준
소유자가 스코프를 벗어나면 카운트가 줄어든다.