在Delphi XE6中,我有一个名为WordDict的TDictionary,它包含TWordRec的实例。定义是:
WordDict: TDictionary<string, TWordRec>;
...
type
TWordRec = class
public
RemoveAlways: Boolean; // Is this CORP LLC, etc?
RemoveRestricted: Boolean;
Replace: Boolean;
ReplaceWith: string;
Constructor Create(B1, B2, B3: Boolean; S1: String); overload;
end;
当我创建并加载词典....
WordDict := TDictionary<string, TWordRec>.Create;
WordDict.Add('CO', TWordRec.Create(True, False, False, ''));
WordDict.Add('CORP', TWordRec.Create(True, False, False, ''));
...
我遇到内存泄漏,并且使用AQTime,它显示我的TWordRec的每次出现都是&#34;泄漏&#34;记忆。如果我将WordDict条目创建为TWordRec,如何在加载后处置它们?我是否处理它们,因为这不仅仅是字典中指向实际对象的指针吗?
装载后我是否立即丢弃TWord?当应用关闭时,我是否仅删除词典中的所有条目?我显然不明白为什么我在TWordRec上收到内存泄漏,所以我不知道如何解决它......
谢谢!
答案 0 :(得分:13)
TWordRec
您没有收到内存泄漏,而TDictionary
的行为并不像您期望的那样。标准TDictionary
类没有任何对象所有权机制。如果您将容器类更改为TObjectDictionary
并使用doOwnsValues
选项集创建它,它将自动释放所拥有的对象,这是您期望的行为。
另一种方法是在最终释放TDictionary
对象之前,遍历释放TDictionary
实例中每个对象的项目。