`alloc::rc::Rc`和`std::rc::Rc`有什么区别?

3

我很好奇这两个模块在实践中有什么区别?如果没有,那为什么会有这两个重复的模块呢?


1
请参见https://dev59.com/GIvda4cB1Zd3GeqPXUcd。 - Shepmaster
1个回答

7

std::rc::Rc只是alloc::rc::Rc的重新导出。您可以在src/std/lib.rs中看到整个rc模块被重新导出:pub use alloc::rc;

alloc创建用于任何类型的内存分配。引用计数、箱式、原始分配和一般访问底层分配器(通常是Rust中的jemalloc)。由于Rc类型是如此常见,应该存在于标准库中,但alloc crate不应该是标准库的一部分,因此只有alloc crate的rc模块被重新导出到标准库中。这样就使用户不必关心alloc crate,并提供了一个干净的标准库,没有不舒适使用的奇怪东西。


你能解释一下它们为什么被重新导出吗? - Daniel Fath
@DanielFath:这只是灵活性和方便性的问题。一方面,拥有多个低级别的箱(corealloccollections等)更加灵活,因此低级别用户(如内核编写者)可以挑选适用于其上下文环境的箱;另一方面,对于用户来说,拥有一个单一的箱(std)更加方便。 - Matthieu M.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接