是否可以在 Rust 标准库中找到所有智能指针的列表?如果是这样怎么办?

Is it possible to find a list of all smart pointers in Rust Standard Library? If so how?

我想知道,有没有办法知道 Rust std 中所有智能指针的列表?

我知道StringVec<T>是智能指针,正在阅读Chp。 Rust 书的 15,我正在学习 Box<T>Rc<T>Ref<T>RefMut<T>

我只是想知道,有没有地方可以知道 Rust 的 std 中所有可用的智能指针?

我认为 all-encompassing 列表不会特别有用,因为有很多(尤其是许多更多地用作另一种类型的实现细节)。如果你真的想要一份技术上智能指针的所有内容的完整列表,那么正如 eggyal 在对你的问题的评论中指出的那样,你可以浏览 Deref 的实现者,但这可能会给你带来更多的噪音而不是有用的信息。我在下面列出了一些最常见和最有用的:

  • Box<T> - 指向堆上对象的唯一指针。类似于 C++ 的 std::unique_ptr.
  • Rc<T>/Weak<T> - 共享指针,在单个线程上提供值的共享所有权。这个智能指针不能在线程之间安全地发送,因为它不使用原子操作来维护它的引用计数(编译器会确保你不会不小心这样做)。
  • Arc<T>/Weak<T> - 与 Rc 非常相似,只是它使用原子操作来更新其引用计数,因此是 thread-safe。类似于 std::shared_ptr.
  • Vec<T>/String/PathBuf/OsString 等人。 - 所有这些都是智能指针,用于拥有堆上动态分配的项目数组。阅读他们的文档以了解更多具体细节。
  • Cow<'a, B> - clone-on-write智能指针。当您拥有可以借用或拥有的价值时很有用。

上面的列表不是完整的图片,但它会让你对你编写的大部分代码有很大帮助。

正如您所注意到的,还有其他智能指针,例如 RefMutexGuard。这些由具有内部可变性的类型返回,并且通常在删除时具有某种特定行为,例如释放锁或递减引用计数。通常您与这些类型的交互不多,但您可以在 as-needed 基础上阅读它们的文档。

还有Pin<T>, but this smart pointer is notoriously hard to understand and really only comes up in conversations about the implementation details of futures and generators. You can read more about it here.