我在Delphi 10.1.2中看到了几个TRegEx用法的Delphi示例,例如以下示例:

try
  RegexObj := TRegEx.Create(REGEX_EXTRACTEMAILADDRESSES, [roIgnoreCase]);
  MatchResults := RegexObj.Match(ThisPageText);
  while MatchResults.Success do
  begin
    slEmailAddressesOnThisPage.Add(MatchResults.Value);
    MatchResults := MatchResults.NextMatch();
  end;
except
  on E: ERegularExpressionError do
  begin
    // Todo: Log Syntax error in the regular expression
  end;
end;


因此,我想知道在这样的示例中是否必须在创建后显式释放TRegEx对象?

最佳答案

创建后,只有从TObject派生的类对象必须显式从内存中释放。 TRegEx而是record,因此当它超出范围时将被释放。 TRegEx.Create是一个构造函数,但不是一个在堆上(仅在调用堆栈上)创建新对象的构造函数,因此没有任何要手动释放的对象(没有为此定义的析构函数)。

09-12 03:13