gpt4 book ai didi

C# 内存/分配清理

转载 作者:太空宇宙 更新时间:2023-11-03 19:20:13 24 4
gpt4 key购买 nike

一些近似代码试图说明这个问题,什么时候标记为可用于垃圾收集的对象 --

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 对象被标记为垃圾回收.
是对的吗?感谢您的任何见解...

最佳答案

Is that right?

是的,当 main 方法完成执行时,tb 变量超出范围(当然除非您将指向它的指针添加到另一个具有更大范围的变量) tb 符合垃圾回收条件。当然,实际的垃圾收集何时发生是您无法控制的。它可能会在 main 方法完成执行后很久才发生。决定最佳时机的是 CLR。因此,如果您没有在 main 方法完成后立即回收所有分配的内存,请不要感到惊讶。

关于C# 内存/分配清理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12959756/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com