rust 문법 및 의미 10 참조 및 대여

2199 단어 rust

rust 문법 및 의미 10 참조 및 대여


references and borrowing 참조 및 대여
소유권 개념은 공식 설명에 따라 세 부분으로 나뉜다.
  • 소유권ownership
  • 참조 및 대여references and borrowing
  • 라이프 사이클 라이프 타임
  • 개술


    작업 형식
    성명
    example
    &T
    참조(객체 불변)
    &Vec
    &mut T
    참조(객체 가변)
    &mut Vec
    *
    가변 객체에 대한 참조 액세스
    {let y = &mut x; *y += 1;}
  • & c의 주소 찾기 작업과 비슷한 것 같아서 포인터 획득
  • * c의 주소 찾기 내용과 유사한 동작으로 바늘에 저장된 주소의 내용을 획득
  • .

    참조 reference

    &T      //  ( ) // e.g. &Vec
    
  • 인용은 소유권이지 소유권이 아니다.
  • 차용 변수의 귀속으로 작용역을 떠날 때 원시 자원을 방출하지 않습니다.
  • 인용은 immutable,
  • 가변 참조:
    &mutT   //  (   ) // e.g. &mut Vec
    

    대여 규칙

  • 어떤 borrowing 보다 작아야 한다 .
  • 같은 Resource의borrowing, 즉 아래:
  • 변할 수 없는 인용 & T 또는
  • 개만
  • 개 가변 인용 &mutT


  • 두 개 이상의 포인터가 같은 메모리 위치에 동시에 접근할 때, 그것들 중 적어도 한 개가 쓰고 있을 때 (그 1개 N, 동기화되지 않을 때 '데이터 경쟁' 이 존재한다.
    그래서 왜 아래의 코드가 잘못되었는지 설명했다.
    fn main() {
        let mut x = 5;
        let y = &mut x;     // a   mutable borrowing    start here
        *y += 1;
        println!("{}", x);  // a immutable borrowing    try immut borrow
    }                       // a   mutable borrowing      end here
    

    가변 대여는 가변 참조를 생성하기 전에 역할 도메인에서 벗어날 수 있습니다.
    fn main() {
        let mut x = 5;
        {
            let y = &mut x; // a   mutable borrowing    start here
            *y += 1;
        }                   // a   mutable borrowing      end here
        println!("{}", x);  // a immutable borrowing    
    }                       
    

    참조 라이프 사이클


    인용은 인용한 값과 똑같이 오래 살아야 한다.그렇지 않으면 C처럼 메모리 유출을 일으킬 수 있다.

    콩 지식

  • 사용 중인 포인터 해제, 메모리 손상
  • 사용하지 않는 바늘을 방출하지 않음, 메모리 유출
  • 참고 자료

  • The Rust Programming Language
  • Rust 프로그래밍 언어(제1판) 중국어 간체 버전
  • 좋은 웹페이지 즐겨찾기