UniqueString

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

UniqueString

Сообщение Коммунар » 06.08.2008 13:53:48

Нашёл такую странную процедуру - UniqueString называется. Вот меня вопрос мучает: зачем она нужна? В каком случае её применить?

И ещё вопрос о её работе. Если счётчик ссылок строки больше одного, то она копирует строку из S в новое место и в переменную S записывает адрес этого нового места. А куда девается исходная стока, имевшая до этого неединичный счётчик ссылок? Происходит утечка или она уничтожается?
Аватара пользователя
Коммунар
новенький
 
Сообщения: 13
Зарегистрирован: 04.06.2008 23:23:36
Откуда: ССКР

Re: UniqueString

Сообщение Sergei I. Gorelkin » 06.08.2008 14:23:57

UniqueString - это фактически процедура копирования содержимого строк (в отличие от копирования указателей при обычном присваивании). В RTL она применяется очень широко, читай - перед каждым изменением строки (всякие Insert, Delete, SetLength ее вызывают). Кроме того, если обращаться к символам строки по индексу, например s[5] := 'a';, то вызов UniqueString вставляется компилятором.
Самостоятельно вызывать UniqueString обычно требуется тогда, когда работаешь со строками и PChar вперемешку.

У исходной строки счетчик ссылок уменьшается на единицу. Она не уничтожается (т.к. исходно счетчик был больше единицы) и не утекает (будет уничтожена в другом месте, в котором счетчик ссылок уменьшится до нуля).
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 3

Рейтинг@Mail.ru