繁体   English   中英

结构需要一辈子,因为?

[英]Struct needs a lifetime because?

(每个声明标有?的声明都要声明)

我只是慢慢地生活。

由于生命周期省略有助于省略明确描述生命周期( ),因此我们需要对其进行描述。

一个例子可能是一个包含引用的结构:

struct Person<a'>{
car: &'a Car
}

我是否正确,以下假设:

struct是一种值类型 - 因此它的内存位于堆栈中。 在使用此结构的范围结束后 - 结构将死亡。 但是因为这个结构保存了对Car的引用,并且这个引用可能被借用到其他地方 - 只要Car引用正在使用中,结构需要保持活动状态。 终身“一所以告诉人结构来维持生命,只要汽车在使用中。(?)

说实话,我不相信上面的这个陈述。 因为在生锈寿命的其他定义我的理解是这样-这辆车需要活下去,至少只要“一个人这样不会有悬摆指针。

由于生命周期省略有助于省略明确描述生命周期( ),因此我们需要对其进行描述。

不, 这里,终身精益只是让你的生活更轻松(作为作家和读者)。 生命周期仍然存在(语义上),但不需要明确表示(语法上)。

据我所知,Lifetime elision在struct定义中不起作用。 它适用于函数签名和正文。

但是因为这个结构保存了对Car的引用,并且这个引用可能被借用到其他地方 - 只要Car引用正在使用中,结构需要保持活动状态。

不。终身的目标是避免悬挂引用 ,并指出借用关系。

  • 悬空引用是引用(长)死值的引用,可能在释放的内存中或(更糟糕的)在重用内存中引用。
  • 借用检查器使用借用关系来跟踪某人是否仍然具有对值的引用; 虽然有人对某个值有引用,但不应将其移动或更改为其他类型,以免所述引用变为悬空。

有关悬空参考的更深入解释, 我建议这个问题

因此,生命期是关于确保参考永远不会超过它所指的值。

因此,约束与你的信念相反: 'a这里的目标是让编译器确保你的Person永远不会超过它所指的Car

反过来说:struct包含一个引用,因此它可能不会超过引用指向的东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM