这个Array.new在一个循环中是否会产生内存泄漏?

时间:2016-07-21 00:12:07

标签: arrays ruby

我知道如何在C ++中这样做,但在Ruby中,我不太确定。这基本上就是我正在使用的结构(除了不是整数,我在数组 data 中包含2个元素数组。)

data = [ 1, 2, 3 ]

while true do
    wrong = Array.new
    data.each do |d|
        print "Guess: "
        guess = gets
        if guess.strip.to_i == d
            puts "Correct!"
        else
            puts "Sorry, the right answer is #{ d }."
            wrong << d
        end
    end

    if wrong.length == 0
        break
    else
        data = wrong
    end
end

我是否在每个循环中通过 Array.new 创建内存泄漏?是否有更有效的替代方法?

提前致谢!

2 个答案:

答案 0 :(得分:1)

不,Ruby有垃圾收集器。垃圾收集器的基本设计是检查对象以查看它们是否已超出范围,如“错误”变量,如果未被其他对象引用,则标记为删除(释放)。

Ruby和其他语言现在拥有更复杂的垃圾收集器,那些以它为生的人可以在我给出的简单解释中挖洞,但这是基本的想法。

答案 1 :(得分:1)

Ruby允许并行分配,因此交换datawrong的值就像

一样简单
data, wrong = wrong, data

您不是通过调用Array.new来创建内存泄漏,因为ruby具有自动垃圾回收功能,因此一旦程序不再拥有对它们的引用,它将删除旧数组。