Nur*_*yev 3 reference reference-counting lifetime rust borrowing
我正在阅读 Rust Book,所有内容都很容易理解(感谢这本书的作者),直到关于生命周期的部分。我花了一整天,阅读了很多关于生命的文章,但我仍然对正确使用它们感到非常不安。
不过,我确实理解的是,显式生命周期说明符的概念旨在解决悬空引用的问题。我也知道 Rust 有引用计数智能指针 ( Rc),我相信它与shared_ptrC++ 中的相同,具有相同的目的:防止悬空引用。
鉴于这些生命周期对我来说是如此可怕,而且智能指针对我来说非常熟悉和舒适(我在 C++ 中经常使用它们),我可以避免使用智能指针的生命周期吗?还是生命周期是我必须在 Rust 代码中理解和使用的不可避免的事情?
生命周期是我必须在 Rust 代码中理解和使用的不可避免的事情吗?
为了阅读现有的 Rust 代码,您可能不需要了解生命周期。借用检查器理解它们,因此如果它可以编译,那么它们是正确的,您只需查看代码的作用即可。
我对正确使用它们非常不安全。
关于生命周期注解,最重要的一点是它们什么都不做。相反,它们是向编译器表达引用之间关系的一种方式。例如,如果一个函数的输入和输出具有相同的生命周期,这意味着输出包含对输入(或其中一部分)的引用,因此不允许比输入存活更长时间。“错误地”使用它们意味着您正在告诉编译器有关引用的生命周期的一些信息,但它可能被证明是不真实的 - 它会给您一个错误,因此没有什么可不安全的!
我可以避免使用智能指针的生命周期吗?
您可以选择完全避免使用引用并Rc在任何地方使用。你会错过 Rust 的一大特性:生命周期和引用构成了最重要的零成本抽象之一,它使 Rust 同时快速和安全。有一些用 Rust 编写的代码,没有人会尝试用 C/C++ 编写,因为人类永远无法绝对确定他们没有引入内存错误。避免 Rust 引用而使用智能指针通常会导致代码变慢,因为智能指针有运行时开销。
许多 API 使用引用。为了使用这些 API,您至少需要对正在发生的事情有所了解。
最好的理解方法就是编写代码并从哪些有效哪些无效中获得直觉。Rust 的错误信息非常好,对形成这种直觉有很大帮助。