Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Счетчик ссылок. [D7, 2003]


vlad0 ©   (2007-10-05 10:17:00) 

Просто стало интересно, а можно ли узнать значение счетчика ссылок у string'овой переменной например?

var
 str1, str2, str3: string
begin
 str1 := 'hi';
 str2 := str1;
 str3 := str1;
......


Однокамушкин   (2007-10-05 10:31:00) [1]


> vlad0   (05.10.07 10:17)  
> var
>  str1, str2, str3: string
> begin
>  str1 := 'hi';
>  str2 := str1;
>  str3 := str1;

Если в данном случае использовать метод Инс ©   (05.10.07 10:25) [1], счётчик ссылок получится -1, но это не значит, что метод неправильный, просто строки, заданные литералами, для экономии памяти ссылаются прямо на сам литерал в коде, а не на его копию в динамической памяти, а чтобы отличать "литеральные" строки от "динамических", для "литеральных" счётчик ссылок всегда делают -1

Если хотите получить "правильное" значение счётчика, после str1 := 'hi' поставьте UniqueString(str1) - это приведёт к тому, что литерал скопируется в динамическую память, и str1 начнёт указывать на эту копию, а не на сам литерал


Инс   (2007-10-05 10:25:00) [2]

Можно, а зачем? Вообще так:

RefCnt:=PInteger(PChar(str) - 8)^;


Наверх

Титульная страница Поиск, карта сайта Написать письмо