Нашёл такую странную процедуру - UniqueString называется. Вот меня вопрос мучает: зачем она нужна? В каком случае её применить?
И ещё вопрос о её работе. Если счётчик ссылок строки больше одного, то она копирует строку из S в новое место и в переменную S записывает адрес этого нового места. А куда девается исходная стока, имевшая до этого неединичный счётчик ссылок? Происходит утечка или она уничтожается?
UniqueString
Модератор: Модераторы
- Sergei I. Gorelkin
- энтузиаст
- Сообщения: 1409
- Зарегистрирован: 24.07.2005 14:40:41
- Откуда: Зеленоград
UniqueString - это фактически процедура копирования содержимого строк (в отличие от копирования указателей при обычном присваивании). В RTL она применяется очень широко, читай - перед каждым изменением строки (всякие Insert, Delete, SetLength ее вызывают). Кроме того, если обращаться к символам строки по индексу, например s[5] := 'a';, то вызов UniqueString вставляется компилятором.
Самостоятельно вызывать UniqueString обычно требуется тогда, когда работаешь со строками и PChar вперемешку.
У исходной строки счетчик ссылок уменьшается на единицу. Она не уничтожается (т.к. исходно счетчик был больше единицы) и не утекает (будет уничтожена в другом месте, в котором счетчик ссылок уменьшится до нуля).
Самостоятельно вызывать UniqueString обычно требуется тогда, когда работаешь со строками и PChar вперемешку.
У исходной строки счетчик ссылок уменьшается на единицу. Она не уничтожается (т.к. исходно счетчик был больше единицы) и не утекает (будет уничтожена в другом месте, в котором счетчик ссылок уменьшится до нуля).
