假设我有一个像这样的简单结构体:
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);
}
在执行完AddWeightedIntToList
函数后,本地变量wint的一个副本被添加到weightedInts
中,而本地变量itself则被从内存中删除。
首先:这个理解是否正确?
其次,wint
的这个副本存储在哪里?它不能在堆栈上,因为一旦函数完成,它就会消失(对吗?)。这是否意味着该副本与weightedInts
一起存储在堆上?并且在被删除后是否被垃圾回收,就像引用类型的实例一样?
当然,这个问题很可能在某篇文章中得到了解答,如果是这样的话,提供链接也是可以接受的。我只是没有找到相关文章。