Borrow 안전선

Vec 요소 참조가 살아 있으면 push 재할당 가능성이 안전선이 된다

벡터의 요소 참조는 현재 저장 공간을 바라본다. 그 상태에서 값을 추가하면 내부 버퍼가 옮겨질 수 있으므로, 러스트는 읽기 참조와 변경을 같은 생존 구간에 두지 않는다.
읽기 참조let first = &v[0]가 요소 위치를 빌린다. 변경 요청v.push(6)은 길이 증가와 재할당 가능성을 만든다. 뒤에서 사용참조를 나중에 출력하면 생존 구간이 push 뒤까지 늘어난다.
Vec 참조와 재할당 안전선
상황 컴파일러가 보는 상태 위험 안전한 고치기
요소 빌림 first가 벡터 내부 요소를 읽기 참조로 잡고 있다. 벡터 저장 공간이 유지된다는 보장이 필요하다. 참조 사용을 먼저 끝내고 뒤에서 변경한다.
뒤에서 사용 참조가 선언 위치가 아니라 마지막 사용 지점까지 살아 있다. 중간의 변경이 읽기 참조와 겹친다. 출력을 push 앞에 두거나 별도 블록으로 범위를 닫는다.
push 변경 벡터 길이 변경은 가변 빌림이 필요한 작업이다. 용량 부족이면 요소가 새 주소로 이동할 수 있다. 값이 복사 가능하면 let first = v[0]로 소유 값을 둔다.
재할당 가능성 실제 재할당 여부와 상관없이 가능성만으로 막는다. 낡은 참조가 이전 버퍼를 가리키는 상황을 예방한다. 인덱스를 저장하고 변경 뒤 다시 읽는다.
참조 먼저 사용println!을 push보다 앞에 둔다.
생존 구간 닫기블록을 나눠 읽기 참조가 끝난 뒤 변경한다.
값 복사작은 Copy 값은 참조 대신 값을 저장한다.
다시 조회인덱스를 들고 있다가 변경 후 새로 접근한다.