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

问题描述 投票:0回答:1

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

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

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

reference rust automatic-ref-counting lifetime borrowing
1个回答
0
投票

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

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

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

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

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

可以

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.