delphi – 我是否需要释放GetEnumerator返回的枚举器?
发布时间:2020-12-15 09:29:43 所属栏目:大数据 来源:网络整理
导读:我想将枚举器用于Delphi XE2的泛型集合.我想知道,谁拥有函数GetEnumerator返回的TEnumerator(我在文档中没有找到任何明确的答案): 我拥有它并需要在使用后释放它吗? 或者它归集合所有,我不必关心发布它? 码: procedure Test;var myDictionary: TDictiona
我想将枚举器用于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,它在TDictionary中调用了重新引入的GetEnumerator版本.
重新引入的TDictionary.GetEnumerator创建一个TPairEnumerator实例,将其自身作为要枚举的字典传递.字典不包含对TPairEnumerator的引用. PairEnumerator不会收到有关其字典销毁的通知. 所以,是的,你确实需要自己释放枚举器,并且在销毁它所枚举的字典之前避免任何访问违规. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |