我在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
是一个构造函数,但不是一个在堆上(仅在调用堆栈上)创建新对象的构造函数,因此没有任何要手动释放的对象(没有为此定义的析构函数)。