假设我有一些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
?并且它是在被删除后被垃圾收集的,就好像它是引用类型的实例一样?
这个问题当然有可能在某处的文章中得到回答,在这种情况下,指向该文章的链接将是一个完全可以接受的答案。我只是没有运气找到它。