私がstruct
このような単純なものを持っているとしましょう:
public struct WeightedInt {
public int value;
public double weight;
}
次に、この構造のインスタンスのコレクションがあるとしましょう。
List<WeightedInt> weightedInts = new List<WeightedInt>();
値型と参照型を理解しているので、値型はスタックに割り当てられるため、値型オブジェクトをインスタンス化する関数が終了すると、値型オブジェクトはメモリからクリアされます。これは、次のコードでは次のことを意味します。
void AddWeightedIntToList(int value, double weight) {
WeightedInt wint = new WeightedInt();
wint.value = value;
wint.weight = weight;
weightedInts.Add(wint);
}
ローカル変数のコピーwint
がに追加されweightedInts
ますが、ローカル変数自体は完了後にメモリから削除されますAddWeightedIntToList
。
まず第一に:これは正しいですか?
次に、このコピーはどこwint
に保存されますか?関数が完了すると消えてしまうので、スタックに置くことはできません(右?)。これは、コピーが一緒にヒープに保存されることを意味しますweightedInts
か?そして、それは参照型のインスタンスであるかのように、削除された後に収集されたガベージですか?
この質問がどこかの記事で回答されている可能性は確かにあります。その場合、その記事へのリンクは完全に受け入れられる回答になります。私はそれを見つけることができませんでした。