不,它们也指价值观。如果从上下文中不清楚它们的寿命,则也必须对其进行注释。然后它被称为生命周期。
在以下示例中,必须指定引用所引用的值至少与引用本身一样长:
use std::num::Primitive;
struct Foo<'a, T: Primitive + 'a> {
a: &'a T
}
Run Code Online (Sandbox Code Playgroud)
尝试删除 ,+ 'a
编译器会抱怨。这是必需的,因为T
可以是任何实现的东西Primitive
。
生命周期是值和对这些值的引用之间的链接。
为了理解此链接,我将使用一个残破的平行线:房屋和地址。
一个房子是一个物理实体。它有时建在一块土地上,可以使用几十年或数百年,在此期间可能要翻新多次,并且很可能在某个时候被破坏。
一个地址是一个逻辑实体,它可以指向一个房子,或者到其他物理实体(场,学校,火车站,一个公司的总部,...)。
房屋的使用寿命相对清晰:代表房屋从建造到毁坏之间的可用时间。在这段时间里,这栋房子可能要进行几处翻新,而原来只是一个简单的小屋,最终可能会变成一个成熟的庄园,但这对我们来说并不重要。为了我们的目的,房屋在这些改造过程中一直生活。只有它的创造和最终破坏才重要……即使当我们拆除屋顶时没人碰巧在卧室里可能会更好。
现在,假设您是一名房地产经纪人。您不要将要出售的房屋留在办公室,这是不切实际的。但是,您可以保留他们的地址!
没有生命周期的概念,您的客户会不时抱怨,因为您发送给他们的地址是垃圾场的地址,而不是您拍摄过的那幢可爱的两层楼房屋。您可能还会从警察局收到一些询问,询问为什么在刚刚毁坏的房屋中发现有人拿着您的办公室的小册子,随后的诉讼可能会关闭您的公司。
这显然对您的业务构成风险,因此您应该寻求更好的解决方案。如果每个地址都可以贴上其所指房屋的寿命,那又该怎么办,以使您知道不让人们丧命(或失望)呢?
您可能已经认识到该垃圾场中的C手动内存管理策略;在C中,由房地产经纪人开发商决定,以确保您的地址(指针/引用)始终引用居住房屋。
生锈,然而,引用标记有特殊标记:'enough
; 它表示所引用值的下限。
当编译器检查您对引用的使用是否安全时,它会询问以下问题:
价值仍然存在吗?
只要该值能长期'enough
使用就可以了,此值是否会在100年后出现都没有关系。
归档时间: |
|
查看次数: |
365 次 |
最近记录: |