Строка как объект

Комментарии

3 комментария(ев)
аватар: Belketre
Belketre
Дата: Втр, 06/12/2011 - 03:57
Звание: Мастер
Сообщений: 1889

FluentInterface это конечно хорошо, но данный подход имеет как минимум 2 существенных недостатка:
1. При возврате из методов не изменяющих текущую строку строка результата каждый раз копируется, что не подходит для задач, в которых требуется высокое быстродействие (именно поэтому в C# есть специальный класс - StringBuilder, работа методов которого изменяет саму строку без копирования результата)
2. В Delphi нет сборщика мусора, т.е. не будет освобождаться память промежуточных результатов и утечки памяти неизбежны

аватар: angryvitum
angryvitum
Дата: Втр, 06/12/2011 - 12:44
Звание: Посвященный
Сообщений: 552

Belketre, спасибо!

К слову сказать, в Delphi тоже есть класс TStringBuilder, и описанную задачу можно реализовать так, чтобы в результате работы метода не создавался новый объект, а возвращался указатель на самого себя:

Result := self; но это уже зависит от того, что в конечном итоге требуется получить. Скажу честно, я подсмотрел решение в ]]>HTMLWriter]]>

По поводу утечек памяти: теоретически их быть не должно, так как интерфейсы - типы с управляемым временем жизни.
... Проверил код на утечки памяти, менеджер (FastMemory) об утечках ничего не сообщает.

аватар: Belketre
Belketre
Дата: Втр, 06/12/2011 - 19:05
Звание: Мастер
Сообщений: 1889

Я с интерфейсами в Delphi не разобрался. По идее интерфейс - полностью абстрактный класс, а в Delphi интерфейсы были введены для поддержки технологии COM, т.е. понятие интерфейс тут имеет другой смысл...
В твоем случае можно вообще interface на record заменить, тогда код должен будет работать быстрее