Struct 结构需要一个生命周期,因为?
(每个标有?的语句都希望被断言) 我只是在慢慢地走 由于寿命省略有助于省略对寿命的明确描述(?),因此在某些情况下,我们需要对其进行描述 示例可能是包含引用的结构:Struct 结构需要一个生命周期,因为?,struct,rust,lifetime,Struct,Rust,Lifetime,(每个标有?的语句都希望被断言) 我只是在慢慢地走 由于寿命省略有助于省略对寿命的明确描述(?),因此在某些情况下,我们需要对其进行描述 示例可能是包含引用的结构: struct Person<a'>{ car: &'a Car } struct Person相反:结构包含引用,因此它可能不会比引用所指向的东西更长寿 由于寿命省略有助于省略对寿命的明确描述(?),因此在某些情况下,我们需要对其进行描述 不,在这里,终身省略只是让你的生活更轻松(无论是作为作家还是读者)。生命
struct Person<a'>{
car: &'a Car
}
struct Person相反:结构包含引用,因此它可能不会比引用所指向的东西更长寿
由于寿命省略有助于省略对寿命的明确描述(?),因此在某些情况下,我们需要对其进行描述
不,在这里,终身省略只是让你的生活更轻松(无论是作为作家还是读者)。生命期仍然存在(语义上),但不需要显式表示(语法上)
据我所知,生存期省略在struct
定义中不起作用。它在功能和机构中起作用
但是,由于这个结构包含一个对汽车的引用,并且这个引用可能会被借用到其他地方,所以只要汽车引用还在使用,这个结构就需要保持活动状态
否。生存期的目标是避免挂起引用,并指示借用关系
- 悬空引用是引用(长)死值的引用,可能在释放的内存中,或者在重用的内存中(更糟)
- 借用关系由借用检查器用于跟踪某人是否仍有对某个值的引用;当有人对某个值进行引用时,不应将其移动或更改为另一种类型,以免所述引用悬空
对于悬空引用的更深入解释
因此,生命周期就是要确保引用永远不会超过它所引用的值
因此,约束条件与您的信念相反:'a
的目标是让编译器确保您的人
永远不会比它所指的汽车
活得更长。作为旁注;您关于“结构是一种值类型,因此其内存位于堆栈上”的说法也不完全正确。值类型仅分配为“内联”。如果包含Person
struct的变量是函数的局部变量,则该结构将在堆栈上分配。但是Person
结构很可能被装箱,可能在弧
中,可能在向量
中,等等,因此在堆上被分配。您认为struct
关键字不会使某些内容驻留在堆上,但也不会阻止它,这是正确的。感谢您的澄清!