3

记录中是否可以有一个字符串列表?例如

TImportStats = record
  ATotal:Integer;
  BTotal:String;
  AList:TStringist;
end;

如果我认为我需要在使用记录之前创建它?

4

4 回答 4

7

虽然这是完全合法的,但寻找另一种方式可能是谨慎的。当您说:

我想我需要在使用记录之前创建它

不仅如此,你还需要找到一个好的时机来摧毁它。如果您忘记这样做,则不会出现错误,但您的程序会泄漏内存。

如果记录是字符串列表的所有者,那么最好将它包含在一个类中。这样,字符串列表的构造和销毁将遵循所有 Delphi 开发人员都熟悉的构造函数/析构函数模式。

如果记录不拥有字符串列表,而只是在字符串列表的生命周期内引用它,那么记录就可以了。但是,如果您这样做,请确保记录的生命周期包含在字符串列表的生命周期内,这样您就不会携带过时的引用。

于 2011-03-08T13:41:40.990 回答
3

是的,这应该有效。在您创建字符串列表之前,AList 将(不可用)。因此,您可以在不创建 stringlist 的情况下使用记录的其他元素,但您必须在使用之前创建 stringlist 元素。此外,您有责任在完成后释放每个字符串列表。

于 2011-03-08T13:15:18.993 回答
0

如果 stringlist 仅用于 TImportStats 记录的本地范围,您可能需要查看 Code Central 中的StringList 值实现

这避免了尝试、创建、最终销毁的开销。

于 2011-03-08T22:02:15.770 回答
0

我知道这可能已经晚了,但解决您的问题的最优雅的方法是创建一个 TStringList 的子类,其中 ATotal 和 BTotal 作为其中的两个新元素。然后你可以简单地创建和销毁它,只要你认为合适。这个解决方案干净简单。

于 2011-09-14T11:09:08.023 回答