记录中的Delphi Stringlist

col*_*lin 3 delphi record tstringlist

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

TImportStats = record
  ATotal:Integer;
  BTotal:String;
  AList:TStringist;
end;
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*nan 7

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

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

不仅如此,你还需要找到一个摧毁它的好时机.如果您忘记这样做将没有错误,但您的程序将泄漏内存.

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

如果记录不拥有字符串列表,但只是在字符串列表的生命周期内对它进行引用,那么记录就可以了.但是如果你这样做,请确保记录的生命周期包含在字符串列表的生命周期内,这样你就不会携带陈旧的引用.

  • 此外,OP必须理解对象记录成员只是指向对象的指针.也就是说,如果`a`和`b`是两个类型为`TImportStats`的记录,则`a:= b`将使`a`和`b`指向*相同的*`TStringList`对象,因此任何chagnes到'a.AList`也会影响`b.AList`,反之亦然.另外,`a`的旧`AList`将留在内存中但是没有办法访问它,因此存在内存泄漏(除非你在程序的其他地方存储了一个指向对象的指针).大卫当然知道这一点; 我只是在向OP倾诉. (4认同)