首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >结构需要一生因为?

结构需要一生因为?
EN

Stack Overflow用户
提问于 2016-03-03 12:49:44
回答 2查看 765关注 0票数 4

(标记为的每一条语句都希望被断言)

我只是慢慢地过了一辈子。

由于生命周期省略有助于省略对生命周期的显式描述(),因此在某些情况下我们需要对它们进行描述。

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

代码语言:javascript
复制
struct Person<a'>{
car: &'a Car
}

我以下的假设是对的,

结构是一种值类型,因此它的内存位于堆栈上。在使用此结构的作用域结束后,该结构将死亡。但是,由于这个结构包含了对 Car 的引用,并且这个引用可能被借用到其他地方--只要这个汽车引用在使用中,这个结构就需要继续存在。因此,“生命周期”( Lifetime 'a )告诉这个人只要汽车在使用,就应该保持生命。()

老实说,我不相信我自己的上述说法。因为在其他关于锈蚀寿命的定义中,我是这么理解的--汽车至少需要保持生命,只要'a,这样人就不会有一个悬空的指针。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-03 13:30:48

由于生命周期省略有助于省略对生命周期的显式描述(),因此在某些情况下我们需要对它们进行描述。

不,就像这里所说的那样,终身教育只是为了让你的生活变得更容易(无论是作为作家还是读者)。生命周期仍然存在(语义上),但不需要显式地表示(语法上的)。

据我所知,终身省略在struct定义中不起作用。它在功能、签名和身体中起作用。

但是,由于这个结构保存了一个对汽车的引用,并且这个引用可能被借用到其他地方--只要汽车引用在使用中,这个结构就需要活着。

不是的。生命周期的目标是避免引用的悬空,并指示借用关系。

  • 悬空引用是指(长)死值的引用,可能在已释放的内存中,或者在重用内存中(更糟)。
  • 借用关系由借入检查器用来跟踪某人是否仍有对某个值的引用;虽然某人对某个值进行了引用,但不应将其移动或更改为另一种类型,以免所述引用变得悬空。

要更深入地解释悬空引用,请参阅I recommend this question

因此,生命周期就是确保一个引用永远不会超过它所指的价值。

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

票数 9
EN

Stack Overflow用户

发布于 2016-03-03 12:58:15

相反,结构包含一个引用,因此它可能不会超过引用指向的内容。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35772635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档