gpt4 book ai didi

rust - 何时使用 Rc 与 Box?

转载 作者:行者123 更新时间:2023-11-29 07:44:35 24 4
gpt4 key购买 nike

我有以下代码,它同时使用了 RcBox;这些有什么区别?哪个更好?

use std::rc::Rc;

fn main() {
let a = Box::new(1);
let a1 = &a;
let a2 = &a;
let b = Rc::new(1);
let b1 = b.clone();
let b2 = b.clone();

println!("{} {}", a1, a2); //=> 1 1
println!("{} {}", b1, b2); //=> 1 1
}

playground link

最佳答案

Rc提供共享所有权,因此默认情况下不能更改其内容,而 Box提供独占所有权,因此允许突变:

use std::rc::Rc;

fn main() {
let mut a = Box::new(1);
let mut b = Rc::new(1);

*a = 2; // works
*b = 2; // doesn't
}

另外Rc不能在线程间发送,因为它没有实现Send

底线是它们用于不同的事情:如果您不需要共享访问,请使用 Box;否则,请使用 Rc(或 Arc 用于多线程共享使用)并记住您将需要 CellRefCell 用于内部可变性。

关于rust - 何时使用 Rc 与 Box?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49377231/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com