wavebvg писал(а):ради сериализации использовать отдельную реализацию ассоциативного массива, несовместимую с базовыми реализациями (TStrings и т.п.) кажется чересчур расточительным занятием.
Для того, чтобы элементы данных самоуничтожались когда их никто не использует, необходимо обращаться с ними не как с классами, а как с интерфейсами. Только у переменных типа
Interface есть подсчет ссылок, у переменных типа
Pointer или
Class подсчета ссылок нет.
К сожалению, для хранения типов
Interface обычные контейнеры вроде TStrings или TList не подходят. Поэтому, для создания ассоциативного массива с поддержкой reference counting приходится извращаться. Если вы знаете способ лучше - поделитесь.
Про корректность не понял - причем тут компиляция, инкапсуляция и полиморфизм, когда есть всего один тип элемента, аналог Variant? Элемент может хранить разные типы значений, тип значения легко проверить. Даже если из элемента хранящего текст прочитать число, будет прочитано число по умолчанию (ноль).
wavebvg писал(а):И да, нескромный вопрос: зачем создавать TStringStream, чтобы прочитать/записать в строку поток байт?
Так исторически сложилось. =) Сейчас переделаю.