我最近开始学习 Rust 并且刚刚了解了智能指针(Box,Rc和RefCell)。
在指南中,他们谈到了Rc实施“共享所有权”。但如果我理解正确的话,所有权制度的全部意义在于只能有一个所有者。
而对我(仍然是 Rust 新手)来说,似乎Rc并RefCell拥有它们所包含的价值并只是“公开”对所包含值的不同类型的引用?
我错了,如果是的话:为什么允许 Rust 像这样“欺骗”所有权系统,理论上我是否能够实现我自己的“欺骗”类型?
如果我理解正确,所有权制度的全部意义在于只能有一个所有者。
不会。 Rust 保证最多只能有一个可变借用,并且不能同时存在可变和非可变借用。它没有说任何关于所有者的事情。
为什么允许 Rust“欺骗”所有权系统
它没有。
从理论上讲,我是否能够实现我自己的“作弊”类型
是的。这些类型都是在 Rust¹ 中实现的。根据 Rust 的安全规则,这些类型经过实战测试并且完全安全,但它们需要unsafe在较低级别使用。
请注意,unsafe不允许绕过这样的规则,即您可以有一个可变借用 XOR 任意数量的非可变借用,但是使用 unsafe,您无论如何都可以这样做。当然,这实际上是不安全的(并触发未定义的行为)。
1:虽然其中一些类型是使用编译器私有的特性实现的,所以你不能像标准库那样高效地做所有事情,Box并且UnsafeCell是语言特有的,不能被普通库复制. 例如,在某些情况下,有许多板条箱提供Rc或Arc替代品比标准板条箱更好。