gpt4 book ai didi

rust - 这个 C 结构的 Rust 等价物是什么?

转载 作者:行者123 更新时间:2023-11-29 08:14:53 26 4
gpt4 key购买 nike

我正在阅读 Rust 书并且正在阅读所有权章节。他们有一辆汽车和四个轮子的 sample 。车轮知道它们的主人(汽车),但汽车不知道它的轮子。这让我开始思考,这段 C 代码的 Rust 等价物是什么?

struct Car;
struct Wheel {
int size;
struct Car *owner;
};

struct Car {
char const *name;
Wheel wheels[4];
};

最佳答案

嗯,字面上的答案是:

struct Car {
name: &'static str, // '
wheels: [Wheel; 4],
}

struct Wheel {
size: i32,
owner: *mut Car,
}

但自owner 以来,这不是非常有用的不能在 unsafe 之外使用代码,因为它是一个裸指针。然而,这达到了 Rust 的局限性,因为在实践中不可能有循环借用的引用;也就是说,您不能使用 &Car对于 owner .

这引出了一个问题:在这里,您真正想要表达的是什么?做 Wheel 实际上需要了解 Car它附在?如果没有,您可以删除 owner一切都会好起来的。

如果是这样,你能忍受unsafe吗?阻止你的代码(另外:这通常应该是你最后的选择)?如果没有,您需要一些共享所有权的概念。在那种情况下,您是否只需要对该结构的只读访问权限?如果是这样,也许你想要 Rc<Car> .如果没有,您可能需要 Rc<Cell<Car>> ...除非你在线程环境中工作,在这种情况下你需要 Arc<Mutex<Car>> ...也许吧。

我想我的意思是:有一个显而易见的,直接等价,但如果你真的想移植语义......你将需要更多具体说明您要做什么,而不是如何您要尝试做什么。

关于rust - 这个 C 结构的 Rust 等价物是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28026423/

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