我正在做一个解决同等系统(代数)的程序,并且创建了一个名为TCongruence
的类,该类带有构造函数,函数,类函数等。我已经声明了一个私有变量:
private
x: array of TCongruence;
当我尝试填充此数组时,我正在编写以下代码:
counter := counter + 1;
SetLength(x, counter);
x[counter-1] := TCongruence.Create(...);
我了解这段代码在花了这三行之后会起作用,因为我的原始代码是这样的:
counter := counter + 1;
SetLength(x, counter);
tmp := TCongruence.Create(...);
x[counter-1] := tmp;
我当然有
tmp: TCongruence
。为什么第二段代码错误?类是引用,因此鉴于我没有在tmp上调用
Free
的事实,我认为我可以做类似的事情。错误=在编译时很好,但是在运行时访问数组时,我得到了奇怪的值。
最佳答案
两种变体之间没有实际区别。分配给中间局部变量似乎有点浪费,但它不会改变程序的行为。
如果行为有所不同,那可能是由于您在程序的其余部分中看不到的其他因素造成的。
最后,一次增加一个元素的数组有点笨拙,可能会很慢,并且可能导致内存碎片化。通常,使用类似TList<TCongruence>
或TObjectList<TCongruence>
的类会更有意义。然后,您可以编写:
List.Add(TCongruence.Create(...))