gpt4 book ai didi

Delphi类的动态数组

转载 作者:行者123 更新时间:2023-12-03 19:13:35 25 4
gpt4 key购买 nike

我正在编写一个解决同余(代数)系统的程序,并且我创建了一个名为 TCongruence 的类,其中包含构造函数、函数、类函数等。我已经声明了一个私有(private)变量:

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。为什么第二 block 代码是错误的?类是引用,因此我认为我可以做类似的事情,因为我没有在 tmp 上调用 Free


错误 = 在编译时它很好,但在运行时当我访问数组时我有奇怪的值。

最佳答案

这两种变体之间没有实际差异。分配给中间局部变量似乎有点浪费,但它不会改变程序的行为。

如果行为存在差异,那么这将是由于我们无法看到的程序其余部分中的其他因素造成的。

最后,一次增加一个元素的数组有点笨重,可能很慢,并且可能会导致内存碎片。通常,使用像 TList<TCongruence> 这样的类会更有意义。或TObjectList<TCongruence> 。然后你可以写:

List.Add(TCongruence.Create(...))

关于Delphi类的动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43832922/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com