Object 如何释放Pascal函数';什么是英语?

Object 如何释放Pascal函数';什么是英语?,object,pascal,free,freepascal,lazarus,Object,Pascal,Free,Freepascal,Lazarus,我在Pascal中有一个函数,它返回一个StringList作为结果。如何正确地释放它?由于它不是全局变量,我无法在Form.FormDestroy过程中释放它。而且在返回后释放它也不起作用(不过这应该是允许的,哈哈) 一般来说,程序一关闭,是否有办法释放所有对象(包括窗体无法控制的对象)?@TomBrunberg是对的,他的评论解决了问题: 引用返回的TStringList并使用该引用释放它: var sl: TStringList; begin sl := fnThatRetur

我在Pascal中有一个函数,它返回一个
StringList
作为结果。如何正确地释放它?由于它不是全局变量,我无法在
Form.FormDestroy
过程中释放它。而且在返回后释放它也不起作用(不过这应该是允许的,哈哈)


一般来说,程序一关闭,是否有办法释放所有对象(包括窗体无法控制的对象)?

@TomBrunberg是对的,他的评论解决了问题:


引用返回的
TStringList
并使用该引用释放它:

var 
  sl: TStringList; 
begin
  sl := fnThatReturnsAStringList; 
  UseTheList(sl);
  sl.Free; 
end;
另一种可能性是,如果您仅因为该调用的副作用而调用该函数,而对返回的
TStringList
不感兴趣,您甚至可以通过调用以下命令来释放该函数:

begin
  fnThatReturnsAStringList.Free;
end;

@汤姆布伦伯格是对的,他的评论解决了问题:


引用返回的
TStringList
并使用该引用释放它:

var 
  sl: TStringList; 
begin
  sl := fnThatReturnsAStringList; 
  UseTheList(sl);
  sl.Free; 
end;
另一种可能性是,如果您仅因为该调用的副作用而调用该函数,而对返回的
TStringList
不感兴趣,您甚至可以通过调用以下命令来释放该函数:

begin
  fnThatReturnsAStringList.Free;
end;

一旦你用完它,就把它销毁。如何做到这一点取决于哪个对象拥有它并决定它的生存期。很多可能的模式。如果没有更多信息,我们无法告诉您使用哪一个。最好你读一本好书来学习这些概念。一旦函数的结果返回,我就不再需要它了。但是我看不到释放StringList的真正选择,因为这显然不能在结果之前发生,也不能在结果之后发生。由于它是一个局部变量,我无法从函数之外的任何地方访问它。因此,在函数返回时销毁它。引用返回的
TStringList
并使用该引用释放它:
var sl:TStringList;begin sl:=返回字符串列表;使用列表;sl.免费;结束@TomBrunberg谢谢,这很有道理!我试试看。用完后就把它销毁。如何做到这一点取决于哪个对象拥有它并决定它的生存期。很多可能的模式。如果没有更多信息,我们无法告诉您使用哪一个。最好你读一本好书来学习这些概念。一旦函数的结果返回,我就不再需要它了。但是我看不到释放StringList的真正选择,因为这显然不能在结果之前发生,也不能在结果之后发生。由于它是一个局部变量,我无法从函数之外的任何地方访问它。因此,在函数返回时销毁它。引用返回的
TStringList
并使用该引用释放它:
var sl:TStringList;begin sl:=返回字符串列表;使用列表;sl.免费;结束@TomBrunberg谢谢,这很有道理!我会试试看。正如您在一篇评论中所说,我添加了另一种可能性:一旦函数的结果返回,我就不再需要它了。在第一个示例中,您应该将
Free
包装在
try..finally
块中,以防
UseTheList()
引发异常:
sl:=fntathreturnsastringlist;尝试使用列表(sl);最后,自由;结束我添加了另一种可能性,正如您在一条评论中所说的:一旦函数的结果被返回,我就不再需要它了。在第一个示例中,您应该将
Free
包装在
try..finally
块中,以防
UseTheList()
引发异常:
sl:=fnatherreturnsastringlist;尝试使用列表(sl);最后,自由;结束