【发布时间】:2012-10-18 16:51:29
【问题描述】:
一些近似代码试图说明这个问题,什么时候标记为可用于垃圾收集的对象 --
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 他确实说这是接近代码(又名伪代码)...
-
无法判断 tb 何时会被清理干净。也许有时在未来,如果超出范围之后,也许永远不会。取决于垃圾收集器(通常是不确定的)。
-
Simon -- 但是当 tb 超出范围时,它会被标记为 GC,对吧?也就是说,不需要采取明确的措施来确保不再引用 ToyBox 对象或任何 Toy 对象,对吗?
标签: c# memory-management garbage-collection