此代码中是否存在内存泄漏

时间:2015-02-26 19:22:07

标签: c# memory-leaks

如果我有一个带构造函数的类,它接受这样的数组:

    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;
        }
    }

    ...
    ...
}

我的理解是默认情况下将数组作为引用传入。所以,我不认为这是一个泄漏,一旦构造函数代码完成,构造函数中传递的引用将被清零。

所以,没有泄漏。这是对的吗?

谢谢,

1 个答案:

答案 0 :(得分:4)

数组不是通过引用传递,数组引用。对数组的引用按值传递。

对于内存泄漏,垃圾收集器将在不再引用这些对象时立即清理所有托管对象;你不需要担心明确的内存管理,除非在你处理非托管内存的情况下(你在这里没有做过)。