gpt4 book ai didi

delphi - 我需要释放 GetEnumerator 返回的枚举器吗?

转载 作者:行者123 更新时间:2023-12-03 15:00:34 24 4
gpt4 key购买 nike

我想将枚举器用于 Delphi XE2 的通用集合。我想知道,谁拥有函数 GetEnumerator 返回的 TEnumerator (我在文档中没有找到任何明确的答案):

  • 我是否拥有它并需要在使用后释放它?
  • 或者它归该收藏所有,我不必关心发布它?

代码:

procedure Test;
var
myDictionary: TDictionary<String, String>;
myEnum: TDictionary<String, String>.TPairEnumerator;
begin
{ Create a dictionary }
myDictionary := TDictionary<String, String>.Create;
myDictionary.Add('Key1', 'Value 1');
myDictionary.Add('Key2', 'Value 2');

{ Use an enumerator }
myEnum := myDictionary.GetEnumerator;
// ... do something with the Enumerator ...

{ Release objects }
myEnum.Free; // ** Do I need to free the enumerator? **
myDictionary.Free;
end;

最佳答案

如果您查看 TDictionary 的源代码,您会发现 GetEnumerator(在其祖先中)调用 DoGetEnumerator,而 DoGetEnumerator 在 TDictionary 中调用重新引入的 GetEnumerator 版本。

重新引入的 TDictionary.GetEnumerator 创建一个 TPairEnumerator 实例,将其自身作为要枚举的字典传递。该字典不包含对 TPairEnumerator 的引用。 PairEnumerator 不会收到其字典被破坏的通知。

所以,是的,您确实需要自己释放枚举器,并避免任何访问冲突,您确实应该在销毁它枚举的字典之前这样做。

关于delphi - 我需要释放 GetEnumerator 返回的枚举器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9718566/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com