我可以避免使用显式的生存期说明符,而是使用引用计数(Rc)吗?

我正在阅读Rust Book,一切都很容易理解(感谢本书的作者),直到有关lifetimes的部分为止。我一整天都在阅读许多关于终生的文章,但对于正确使用它们仍然很不安全。

不过,我确实理解的是,明确的生命周期说明符的概念旨在解决悬挂引用的问题。我也知道Rust具有引用计数智能指针(Rc),我相信它与C ++中的shared_ptr相同,其目的相同:防止悬挂引用。

鉴于这些生命周期对我来说太可怕了,并且智能指针对我来说非常熟悉和舒适(我在C ++中经常使用它们),我可以避免使用生命周期来支持智能指针吗?还是生命周期是我必须在Rust代码中理解和使用的必然事物?

libailiang 回答:我可以避免使用显式的生存期说明符,而是使用引用计数(Rc)吗?

  

生命周期是我必须在Rust代码中理解和使用的不可避免的事情吗?

为了阅读现有的Rust代码,您可能不需要了解生存期。借用检查器会理解它们,因此,如果编译通过,则它们是正确的,您只需查看代码的作用即可。

  

我对正确使用它们非常不安全。

要了解有关生命周期注释的最重要的事情是它们不做。相反,它们是向编译器表达引用之间关系的一种方式。例如,如果一个函数的输入和输出具有相同的生存期,则意味着该输出包含对该输入(或其一部分)的引用,因此不允许生存时间长于该输入。 “不正确地”使用它们意味着您正在告诉编译器一些关于引用寿命的信息,它可能被证明是不正确的-它将给您带来错误,因此没有什么不安全的!

  

我可以避免使用智能指针吗?

可以选择避免完全使用引用,而在各处使用Rc。您可能会错过Rust的一大功能:生存期和引用构成了最重要的零成本抽象之一,这使Rust既快速又安全。用Rust编写的代码没有人会尝试用C / C ++编写,因为人类永远不可能绝对确定他们没有引入内存错误。避免使用Rust引用支持智能指针通常会导致代码变慢,因为智能指针具有运行时开销。

许多API使用引用。为了使用这些API,您至少需要对正在发生的事情有一定的了解。

理解的最佳方法就是编写代码,并从什么有效和什么无效中获得直觉。 Rust的错误消息非常棒,将有助于形成这种直觉。

本文链接:https://www.f2er.com/3131501.html

大家都在问