Добавление одного и того же объекта к TObjectDictionary дважды освобождает объект

Посмотрите на этот код:

dic:=TObjectDictionary<Integer, TObject>.Create([doOwnsValues]);
testObject:=TObject.Create;
dic.AddOrSetValue(1,testObject);
dic.AddOrSetValue(1,testObject);

Код

  1. Создает Словарь, который владеет содержащимися значениями
  2. Добавляет значение
  3. Добавляет то же значение снова, с использованием того же ключа

Удивительно то, что объект освобождается, когда вы добавляете его во второй раз.

Это предполагаемое поведение? Или ошибка в библиотеках Delphi?

В документации просто говорится: «Если объект принадлежит владельцу, когда запись удаляется из словаря, ключ и / или значение освобождаются». Поэтому кажется немного странным Освободить объект, который я только что попросил добавить!

Есть ли способ запретить TObjectDictionary этого делать? В настоящее время каждый раз, когда я добавляю значение, я должен сначала проверить, есть ли эта комбинация ключ-значение уже в Словаре.

Delphi 2010

[РЕДАКТИРОВАТЬ: После прочтения всех комментариев:

Мои выводы (чего они стоят)]

  • Кажется, это предполагаемое поведение
  • Нет способа изменить это поведение
  • Не используйте TObjectDictionary (или любой из других подобных классов) для чего-либо, кроме обычного использования «Добавьте эти объекты в контейнер. Оставьте их там. Сделайте что-нибудь. Освободите контейнер и все добавленные вами объекты». Если вы делаете что-то более сложное, лучше управлять объектами самостоятельно.
  • Поведение плохо документировано, и вам следует прочитать исходный код, если вы действительно хотите знать, что происходит

[/ EDIT]

15
задан awmross 3 August 2011 в 00:53
поделиться