Посмотрите на этот код:
dic:=TObjectDictionary<Integer, TObject>.Create([doOwnsValues]);
testObject:=TObject.Create;
dic.AddOrSetValue(1,testObject);
dic.AddOrSetValue(1,testObject);
Код
- Создает словарь, которому принадлежат содержащиеся значения
- Добавляет значение
- Добавляет то же значение снова, используя тот же ключ
Удивительно, что объект освобождается, когда вы добавляете его во второй раз.
Является ли это предполагаемым поведением? Или ошибка в библиотеках Delphi?
В документации просто говорится: "Если объект принадлежит, когда запись удаляется из словаря, ключ и/или значение освобождаются". Так что кажется немного странным, чтобы освободить объект, который я только что попросил добавить!
Есть ли способ сказать TObjectDictionary, чтобы не делать этого? В настоящее время, каждый раз, когда я добавляю значение, я должен сначала проверить, если эта комбинация Key-Value уже находится в словаре.
Delphi 2010
[EDIT: После прочтения всех комментариев:
Мои выводы (для чего они стоят)]
- Это, по-видимому, предполагаемое поведение
- Нет способа изменить это поведение.
- Не используйте TObjectDictionary (или любой другой аналогичный класс) для чего-либо другого, кроме обычного "Добавить эти объекты в контейнер. Оставьте их там. Сделайте некоторые вещи. Освободите контейнер и все добавленные вами объекты", Если вы делаете что-то более сложное, лучше управлять объектами самостоятельно.
- Поведение плохо документировано, и вы должны прочитать источник, если хотите действительно знать, что происходит.
[/EDIT]