Я только что рассмотрел использование нового типа TDictionary. Но на QualityCentral я прочитал о две утечки памяти, вызванные TDictionary:Утечка памяти в TDictionary - Проблемы с обходным решением?
http://qc.codegear.com/wc/qcmain.aspx?d=67355
Я просто реализован предлагаемый обходной путь, в основном подклассов TDictionary, перекрывая деструктор и вручную freing два объекта, которые вызывают утечку:
destructor TMemCorrectedDictionary.Destroy;
begin
Values.Free;
Keys.Free;
inherited;
end;
Проблема в том, что значения и ключи являются доступными только для чтения свойствами TDictionary, я не могу установить их в nil. Ну, просто чтобы быть ясным, все отлично работает сейчас, но я подумал, что произойдет, если CodeGear выпустит патч для утечки и снова освободит два объекта в своем собственном деструкторе. Разве это не привело бы к нарушению доступа?
Заранее благодарим за чтение (и, надеюсь, ответ).
Спасибо за ответ. Хотя мне не очень нравится, когда я полагаюсь на кого-то другого, устанавливающего все объекты на нуль, освободив их. Или я здесь параноик? – jpfollenius
Я знаю, что вы имеете в виду и согласитесь. Если бы я был вами, я снова посмотрел бы на исходный код, когда проблема будет устранена в горячем исправлении или пакете обновления - просто чтобы быть уверенным. И я надеюсь, что исправления скоро появятся, потому что в TDictionary есть и другие серьезные ошибки, которые необходимо срочно исправлять. –
Также обратите внимание на то, что на данный момент вам следует избегать использования TDictionary из-за ошибки в методе Clear и его ужасной добавленной производительности. См. Здесь для получения дополнительной информации: http://alex.ciobanu.org/?p=59 –