【问题标题】:Is there a memory leak in this code此代码中是否存在内存泄漏
【发布时间】:2015-02-26 19:22:06
【问题描述】:

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

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

    ...
    ...
}

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

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

谢谢,

【问题讨论】:

  • 可变结构是邪恶的,你应该不惜一切代价避免它们。另请注意,您拥有的类型不是值的逻辑表示,因此根本不应该是 struct

标签: c# memory-leaks


【解决方案1】:

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

至于内存泄漏,一旦不再有对这些对象的任何引用,垃圾收集器就会清理所有托管对象;您无需担心显式内存管理,除非您正在处理非托管内存(您在这里没有这样做)。

【讨论】:

  • 非常感谢Servy
猜你喜欢
  • 1970-01-01
  • 2016-02-04
  • 1970-01-01
  • 2017-12-05
  • 2012-09-27
  • 1970-01-01
  • 1970-01-01
  • 2020-01-29
  • 1970-01-01
相关资源
最近更新 更多