必须在 TRegEx.Create 之后释放 TRegEx 对象吗?
Must free TRegEx object after TRegEx.Create?
我在 Delphi 10.1.2 中看到了几个 Delphi TRegEx
用法示例,如下所示:
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
对象是否必须在创建后显式释放?
只有 class 个派生自 TObject
的对象必须在创建后显式地从内存中释放。 TRegEx
是 record
,所以它在超出范围时被释放。 TRegEx.Create
是一个构造函数,但不是在堆上创建新对象的构造函数,只是在调用堆栈上,因此无需手动释放任何内容(没有为其定义析构函数)。
我在 Delphi 10.1.2 中看到了几个 Delphi TRegEx
用法示例,如下所示:
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
对象是否必须在创建后显式释放?
只有 class 个派生自 TObject
的对象必须在创建后显式地从内存中释放。 TRegEx
是 record
,所以它在超出范围时被释放。 TRegEx.Create
是一个构造函数,但不是在堆上创建新对象的构造函数,只是在调用堆栈上,因此无需手动释放任何内容(没有为其定义析构函数)。