一些近代碼試圖說明的問題,是當對象標記爲可被垃圾收集 -C#存儲器/分配清理
class ToyBox
{
public List<Toy> Toys = new List<Toy>();
}
class Factory
{
public ToyBox GetToys()
{
ToyBox tb = new ToyBox();
tb.Toys.Add(new Toy());
tb.Toys.Add(new Toy());
return tb;
}
}
main()
{
ToyBox tb = Factory.GetToys();
// After tb is used, does all the memory get cleaned up when tb goes out of scope?
}
Factory.GetToys()分配內存。內存何時清理?我假設當Factoy.GetToys()返回ToyBox對象時,ToyBox對象的唯一引用是main()中的引用,所以當該引用超出作用域時,Toy對象和ToyBox對象被標記爲垃圾收集。
是嗎?感謝您的任何見解...
'Factory.GetToys();'?那不工作的人。你也需要工廠的監督。 – DarthVader
@DarthVader他**確實**說它是*附近的代碼*(又名僞代碼)... – Yuck
人們無法分辨何時tb會被清理乾淨。也許有時在未來,如果超出範圍,也許永遠不會。取決於垃圾收集器(通常是非確定性的)。 – Simon