有人可以向我解释为什么Rc<>不是Copy吗?
我正在编写使用大量共享指针的代码,并且不得不一直打字,.clone()这让我很紧张.
在我看来,Rc<>应该只是一个指针,这是一个固定的大小,所以类型本身应该是Sized,因此Copy,对吗?
我错过了什么吗?
Mutex 一次只能有一个读者或作者,RwLock 一次可以有一个作家或多个读者.当你这样说的时候,RwLock似乎总是更好(更少限制)Mutex,为什么我会使用它呢?
我试图Rc<Foo>从哈希映射中获取引用计数并将其放入不同的容器 ( Vec<Foo>) 中。
认为这会起作用(通过增加引用计数),但我得到了一个“预期的结构std::rc::Rc,找到了引用”错误。
如何将 an 转换&Rc<Foo>为 a Rc<Foo>?
更多信息:
struct Foo();
let mut foo : HashMap<usize, Rc<Foo>> = HashMap::new();
let mut bar : Vec<Rc<Foo>> = Vec::new();
foo.insert(0, Rc::new(Foo()));
if let Some(x) = foo.get(&0) {
bar.push(x); // expected struct `std::rc::Rc`, found reference
// note: expected type `std::rc::Rc<Foo>`
// found type `&std::rc::Rc<Foo>` rustc(E0308)
}
Run Code Online (Sandbox Code Playgroud)
我知道哈希映射返回对其拥有的值的引用。但是提领它不工作:既if let Some(&x)和bar.push(*x);导致“无法动弹借来的内容了”。
奇怪的是,添加类型注释会将错误更改为“无法移出Rc”: …
我是Rust和线程的新手,我正在尝试打印一个数字,同时在另一个线程中添加它.我怎么能做到这一点?
use std::thread;
use std::time::Duration;
fn main() {
let mut num = 5;
thread::spawn(move || {
loop {
num += 1;
thread::sleep(Duration::from_secs(10));
}
});
output(num);
}
fn output(num: i32) {
loop {
println!("{:?}", num);
thread::sleep(Duration::from_secs(5));
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码不起作用:它总是打印5,好像数字永远不会增加.