2017-08-07 13 views
0

digitsというリンクリストを使ってRustにカスタム数値ベースシステムを正常に実装しました。リンクリストの半分を再割り当てすると、参照されないチャンクはどうなりますか?

pub struct Digits<'a> { 
    mapping: &'a BaseCustom<char>, 
    digit: u64, 
    left: Option<Box<Digits<'a>>>, 
} 

私は、リンクリスト構造体の寿命を宣言し、BaseCustomのインスタンスに直接リンクされてきました。リンクされたリストの半分を再割り当てすると、参照されていないチャンクはどうなるのですか?BaseCustomのマッピングに関連付けられている生存期間はまだありますか?

例えば、私は「ハロー」のように見えるリンクリスト(私が使用します。この例のために左から右へと私のプロジェクトのように左から右ではない)

h -> e -> l -> l -> o 

を持ってその後、私は再割り当てeから別の文字セットへのリンクリスト参照。

h -> e l -> l -> o 
     \ 
     -> d -> g-> e 

コードではhelloの "llo"を使用していないので、そのメモリは自動的に解放されますか?各文字インスタンスにBaseCustomの参照があるということは、プログラムが終了するまでメモリが保持されていることを意味しますか?

私はRustにガベージコレクタがないことを知っています。したがって、生涯の参照BaseCustomは私を混乱させます。商品は必ずBaseCustomの長さでなければならないと言いますか?それとも、ある時点で解放されているのですか?BaseCustomは、それよりも寿命を長くする必要がありますか?

答えて

1

ここで各文字インスタンスがBaseCustomの参照を持つということは、プログラムが終了するまでメモリが保持されることを意味しますか?

Say it with me

寿命は記述、ない次のとおりです。

生涯注釈がどのくらい生き関与の参照のいずれかの

Or the jargon version you might see elsewhere変更されません。処方

ライフタイムが存在するということは、コードの動作を変更しないということです。

leftを新しい値で上書きすると、古い値が分かりませんので、削除する必要があります。この場合、タイプOption<Box<Digits<'a>>>の値が削除されたことを意味します。 Someの場合は、Boxのデストラクタを呼び出し、デストラクタをDigitsと呼びます。デストラクタを呼び出すと、mappingdigitのデストラクタが呼び出され、それ自身のleftが再帰的に呼び出されます。

参照または整数を削除するとどうなるのですかdo?何もない。

項目がBaseCustomの長さでなければならないとしていますか?それとも、ある時点で解放されているのですか?BaseCustomは、それよりも寿命を長くする必要がありますか?

寿命は、Digitsは、BaseCustomを超えないことがあります。これはBaseCustomへの参照が含まれているため意味があります。


も参照してください:

+0

"寿命は規範的、記述的ではありません。"これは本にあるはずです。 – red75prime

+0

@ red75prime "say it with me"というリンクをクリックすると、本に行くことができます:-) – Shepmaster

+0

それは初版です。 – red75prime

関連する問題