这段代码是否有内存泄漏
Is there a memory leak in this code
如果我有一个 class 构造函数采用这样的数组:
public struct MyStruct{
Car car;
Boolean processed;
}
public class MyClass{
private MyStruct[] mCarStructs;
public MyClass(Car[] cars)
{
//So the only reason I pass Car[] in is to use it to
//populate my array of structs
mCarStructs = new MyStruct[cars.Length];
for (int i = 0; i < cars.Length; i++)
{
myCarStructs[i].car = cars[i];
myCarStructs[i].processed = false;
}
}
public void processCar(...)
{
if (DoProcess(myCarStructs[i].car))
{
myCarStructs[i].processed = true;
}
}
...
...
}
我的理解是默认传入数组作为引用。所以,我不认为这是一个泄漏,一旦构造函数代码完成,传入构造函数的引用将被清空。
所以,没有泄漏。这是正确的吗?
谢谢,
数组未通过引用传递,数组是引用。对数组的引用按值传递。
至于内存泄漏,一旦不再有任何对这些对象的引用,垃圾收集器就会清理所有托管对象;你不需要担心显式内存管理,除非你正在处理非托管内存(你在这里没有这样做)。
如果我有一个 class 构造函数采用这样的数组:
public struct MyStruct{
Car car;
Boolean processed;
}
public class MyClass{
private MyStruct[] mCarStructs;
public MyClass(Car[] cars)
{
//So the only reason I pass Car[] in is to use it to
//populate my array of structs
mCarStructs = new MyStruct[cars.Length];
for (int i = 0; i < cars.Length; i++)
{
myCarStructs[i].car = cars[i];
myCarStructs[i].processed = false;
}
}
public void processCar(...)
{
if (DoProcess(myCarStructs[i].car))
{
myCarStructs[i].processed = true;
}
}
...
...
}
我的理解是默认传入数组作为引用。所以,我不认为这是一个泄漏,一旦构造函数代码完成,传入构造函数的引用将被清空。
所以,没有泄漏。这是正确的吗?
谢谢,
数组未通过引用传递,数组是引用。对数组的引用按值传递。
至于内存泄漏,一旦不再有任何对这些对象的引用,垃圾收集器就会清理所有托管对象;你不需要担心显式内存管理,除非你正在处理非托管内存(你在这里没有这样做)。