gpt4 book ai didi

c# - 如果我返回它创建的数组,新的本地类实例会被垃圾回收吗?

转载 作者:行者123 更新时间:2023-11-30 13:55:51 26 4
gpt4 key购买 nike

假设一个类实例将构建数组:

class FooArrBuilder
{
public Foo[] FinalResult { get { return arr; } }
Foo[] arr;
public void BuildArr();
...
}

然后是这样使用的:

Foo[] GetFooArr()
{
var fb = new FooArrBuilder();
fb.BuildArr();
...
return fb.FinalResult;
}

当在函数局部实例中构建数组时,数组会从构建它的实例中移出,还是将整个实例保留在内存中只是为了包含数组?如果是后者,我不一定要复制数组——但也许我可以让这个类成为一个结构?感谢帮助:)

如果您愿意在这里详细说明 C# 的内存模型,它可能也会帮助我避免进一步的混淆。

提前致谢

最佳答案

类实例不“拥有”或“包含”数组。它仅引用在堆上分配的数组。对该数组的其他引用不会使该类的实例保持事件状态。

如果任何其他对象(或堆栈帧)引用该数组,则为该数组分配的堆内存将保持为该数组分配。一旦这些对象被垃圾收集并弹出这些堆栈帧,垃圾收集器将要求为该数组分配的内存。

关于c# - 如果我返回它创建的数组,新的本地类实例会被垃圾回收吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31724454/

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