Rust · Rc<T>

Rc는 마지막 소유자가 사라질 때까지 값을 살려 둔다

여러 리스트가 같은 꼬리 리스트를 읽어야 할 때, 소유권을 이동하지 않고 참조 카운트를 늘려 공유 소유권을 표현합니다.

shared tail

리스트 a

Rc::new(Cons(5, ...))

공유될 실제 데이터는 힙에 있으며 카운트 1로 시작합니다.

owner b

리스트 b

Rc::clone(&a)

깊은 복사가 아니라 a를 가리키는 소유 핸들을 하나 더 만듭니다.

owner c

리스트 c

Rc::clone(&a)

카운트가 3이 되어 a, b, c가 같은 꼬리를 읽습니다.

1

a 생성

strong_count는 1입니다.

2

b 생성

Rc::clone 후 카운트는 2입니다.

3

c 생성

같은 데이터의 소유자가 하나 더 늘어 3이 됩니다.

2

c 종료

Drop이 카운트를 줄이고 데이터는 아직 유지됩니다.

해결

누가 마지막 사용자인지 컴파일 타임에 모를 때 공유 소유권을 둡니다.

비용

클론마다 카운트 갱신이 있고, 값은 카운트 0에서 정리됩니다.

Rc 한계

읽기 전용 공유입니다. 단독 변경 권한을 자동으로 만들지 않습니다.