【发布时间】:2019-03-09 08:33:30
【问题描述】:
我是 Rust 的新手,写作是为了理解 Rust 中的“智能指针”。我对智能指针在 C++ 中的工作原理有基本的了解,并且从几年前就开始使用它进行内存管理。但令我非常惊讶的是,Rust 还明确地提供了这样的实用程序。
因为从这里的教程(https://pcwalton.github.io/2013/03/18/an-overview-of-memory-management-in-rust.html)来看,似乎每个原始指针都被自动包装了一个智能指针,这似乎很合理。那为什么我们还需要Box<T>、Rc<T>和Ref<T>这些东西呢?根据本规范:https://doc.rust-lang.org/book/ch15-00-smart-pointers.html
任何 cmets 都会受到赞赏。谢谢。
【问题讨论】:
-
“似乎每个原始指针都被自动包装智能指针”——不,这听起来像是到处都在发生隐式转换。原始指针仍然存在,但它们从未自动使用过,它们的大部分用例已替换为某种智能指针风格,其中
Rc<T>,Box<T>和Ref<T>是示例。 -
“为什么我们还需要
Box<T>、Rc<T>和Ref<T>这些东西?” ——我不明白这个问题。那些是智能指针。除了“明确”之外,您还会如何使用它们?听起来你在问c++,“我知道智能指针是什么以及如何使用它们,但我不知道我们需要unique_ptr和shared_ptr来做什么。” -
@trentcl 不,我的意思是这样。编译器是否使用这三个来实际实现智能指针?
-
编译器是否使用智能指针来实现智能指针?对不起,我还是不明白。智能指针是在 Rust 中使用原始指针实现的,就像在 C++ 中一样。您可以查看source code for
Rc<T>,例如:它包含一个NonNull,它只是一个围绕*const(原始)指针的wrapper。这一切都在标准库中,而不是在编译器本身中。 -
如果第一篇文章的语法让你感到困惑,那是因为它已经很老了。我为此写了一个答案。保留以前的 cmets 以防我错了
标签: rust smart-pointers