use std::sync::{Arc, RwLock};
struct C{
n:i32
}
struct D{
//객체의 레퍼런스를 객체의 프로퍼티를 둘 수 없다. 레퍼런스 카운터 모듈인 rc나 arc를 써야 한다.
c:&C//애초에 컴파일 오류가 뜬다.
}
fn main(){
let c = C{n:5};
let e = C{n:10};
let g = Arc::new(C{n:15});
{
//클로저 지원을 위해 move예약어를 쓰면 람다함수가 선언된 블록에 있는 변수의 소유권을 람다 함수에게 넘긴다.
let f = e;
//블록 밖에 있는 객체의 레퍼런스 변수는 변수가 죽은 후에도 남아 있으면 안되기 때문에 컴파일 오류가 뜬다.
let d = &c;
//쓰레드를 생성한 부모 스레드와 객체을 공유하는 방법은 레퍼런스 카운터 모듈 뿐이다.
let n = g.clone();
std::thread::spawn(move||{
println!("{}", d.n);
println!("{}",n.n);
});
}
}
Rust의 코딩은 컴파일러의 엄격한 규칙에 통과할 수 있는 지에 대한 도전임...
댓글 0