我想编写简单的Rust代码,同时保持运行时的确定性,并且不需要内存周期。
我可以在代码中仅使用引用计数指针吗?
答案 0 :(得分:1)
Rust不是垃圾收集语言。所有记忆都是free()
d确定性的。
fn get() -> Vec<i32> {
vec![1, 2, 3] // <--- v is allocated here
}
fn main() {
let v = get();
for i in v {
println!("{}", i)
}
// <--- v is free()d here
}
如果确实需要引用计数类型,请使用Rc<T>
。如果将对象传递给多个线程,则必须使用Arc<T>
。您无法意外地使用Rc<T>
超过线程边界,因为如果编译器检测到此类使用,则会出错。
Rust Rc<T>
和Arc<T>
是不会检测周期的引用计数数据类型。如果您使用Rc<T>
或Arc<T>
创建一个循环,那么该内存将不会是free()d
,并且您将泄漏内存。