生锈寿命仅参考参考文献吗?

Qix*_*Qix 3 rust

我正在努力围绕Rust的一生进行研究(因为官方指南并没有很好地解释它们)。

锈蚀寿命是否仅引用参考,还是可以引用基值/原始值?

Fer*_*rio 5

不,它们也指价值观。如果从上下文中不清楚它们的寿命,则也必须对其进行注释。然后它被称为生命周期。

在以下示例中,必须指定引用所引用的值至少与引用本身一样长:

use std::num::Primitive;

struct Foo<'a, T: Primitive + 'a> {
    a: &'a T
}
Run Code Online (Sandbox Code Playgroud)

尝试删除 ,+ 'a编译器会抱怨。这是必需的,因为T可以是任何实现的东西Primitive


Mat*_* M. 5

生命周期是值和对这些值的引用之间的链接。

为了理解此链接,我将使用一个残破的平行线:房屋和地址。

一个房子是一个物理实体。它有时建在一块土地上,可以使用几十年或数百年,在此期间可能要翻新多次,并且很可能在某个时候被破坏。

一个地址是一个逻辑实体,它可以指向一个房子,或者到其他物理实体(场,学校,火车站,一个公司的总部,...)。


房屋的使用寿命相对清晰:代表房屋从建造到毁坏之间的可用时间。在这段时间里,这栋房子可能要进行几处翻新,而原来只是一个简单的小屋,最终可能会变成一个成熟的庄园,但这对我们来说并不重要。为了我们的目的,房屋在这些改造过程中一直生活。只有它的创造和最终破坏才重要……即使当我们拆除屋顶时没人碰巧在卧室里可能会更好。

现在,假设您是一名房地产经纪人。您不要将要出售的房屋留在办公室,这是不切实际的。但是,您可以保留他们的地址!

没有生命周期的概念,您的客户会不时抱怨,因为您发送给他们的地址是垃圾场的地址,而不是您拍摄过的那幢可爱的两层楼房屋。您可能还会从警察局收到一些询问,询问为什么在刚刚毁坏的房屋中发现有人拿着您的办公室的小册子,随后的诉讼可能会关闭您的公司。

这显然对您的业务构成风险,因此您应该寻求更好的解决方案。如果每个地址都可以贴上其所指房屋的寿命,那又该怎么办,以使您知道不让人们丧命(或失望)呢?


您可能已经认识到该垃圾场中的C手动内存管理策略;在C中,由房地产经纪人开发商决定,以确保您的地址(指针/引用)始终引用居住房屋。

生锈,然而,引用标记有特殊标记:'enough; 它表示所引用值的下限。

当编译器检查您对引用的使用是否安全时,它会询问以下问题:

价值仍然存在吗?

只要该值能长期'enough使用就可以了,此值是否会在100年后出现都没有关系。

  • @nbro:谢谢:)如果您认为自己可以做得更好,请务必提交您自己的答案! (3认同)
  • 太长和冗长的答案,带有不必要的细节,无法传达理解概念的基本思想。 (2认同)