簡體   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