KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
Look at this code: dic:=TObjectDictionary<Integer, TObject>.Create([doOwnsValues]); testObject:=TObject.Create; dic.AddOrSetValue(1,testObject); dic.AddOrSetValue(1,testObject); The code Creates a Dictionary that owns the contained values Adds a value Adds the same value again, using the same key The surprising thing is that the object is freed when you add it the second time. Is this intended behaviour? Or a bug in the Delphi libraries? The documentation simply says "If the object is owned, when the entry is removed from the dictionary, the key and/or value is freed". So it seems a little odd to Free an object that I have just asked it to Add! Is there any way to tell the TObjectDictionary to not do this? Currently, each time I add a value I have to check first if that Key-Value combination is already in the Dictionary. Delphi 2010 [EDIT: After reading all the comments: My conclusions (for what they are worth)] This seems to be the intended behaviour There is no way of modifying this behaviour Don't use TObjectDictionary (or any of the other similar classes) for anything other than the common "Add these objects to the container. Leave them there. Do some stuff. Free the container and all the objects you added" usage. If you are doing anything more complicated, it's better to manage the objects yourself. The behaviour is poorly documented and you should read the source if you want to really know what's going on [/EDIT]
Tags (comma-separated)
Save Edits
Cancel