Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.25;
Скачать: CL | DM;

Вниз

Уникальность Pointer в TList   Найти похожие ветки 

 
Yuri Btr ©   (2004-02-11 21:17) [0]

Ув. мастера - меня беспокоит следующие строки Delphi Help (см. TList.IndexOf)

...Returns the index of the first entry in the Items array with a specified value.
Delphi syntax:
function IndexOf(Item: Pointer): Integer;...
...If a pointer appears more than once in the array, IndexOf returns the index of the first appearance....

Когда может случиться что указатели на добавленные объекты будут равны?
Я так думаю что когда они будут указывать на одну и ту же область памяти. Следовательно создав последовательно два абсолютно одинаковых объекта и добавив их в List - их указатели могут совпасть, или есть ещё какоето условие?
Заранее спасибо.


 
Vlad ©   (2004-02-11 21:19) [1]

Для каждого объекта - свой указатель. Вот вся уникальность


 
Yuri Btr ©   (2004-02-11 21:24) [2]

т.е. одинаковые указатели будут только в следующем случае:
///
var
Song:PSong;
i,k:integer;
....
New(Song);
Song^.ShortFileName:=ShortFileName;
Song^.FileLength:=FileLength;
i:=Songs.Add(Song);
k:=Songs.Add(Song);
///
т.е.
Songs.Items[i]=Songs.Items[k]


 
YuRock ©   (2004-02-11 21:37) [3]

В таком случае за уникальностью прийдется следить самому - проверять, нет ли такого уже?...


 
y-soft ©   (2004-02-11 21:57) [4]

>YuRock © (11.02.04 21:37) [3]

Во избежание Access violation не мешало бы еще вместе со ссылками на объекты хранить и счетчики ссылок для каждого...

Вообще, удобно создать свой специальный класс-потомок TList...


 
Юрий Федоров ©   (2004-02-11 22:11) [5]

>>y-soft © (11.02.04 21:57) [4]
Тогда уж лучше интерфейсами пользоваться, и классом TInterfaceList. :-)
Хотя достаточно сложно представить ситуацию, чтобы логика была настолько сложной, что нельзя разобраться, когда создавать объект, а когда его разрушать


 
y-soft ©   (2004-02-11 22:12) [6]

>Юрий Федоров © (11.02.04 22:11) [5]

Всякие задачи бывают - из subj, как всегда задача не ясна :)


 
Юрий Федоров ©   (2004-02-11 22:16) [7]

>>y-soft © (11.02.04 22:12) [6]
Кстати, насчет счетчика ссылок и класса - потомка TList
Ссылки ведь могут быть и снаружы, их этот класс никак не учтет...
А отличие от интерфейсов будет заключаться в такой неприятности : автоматические вызовы AddRef и Release для объектов (в отличие от интерфейсов) компилятор на себя не возьмет - придется руками везде вызывать


 
y-soft ©   (2004-02-11 22:21) [8]

>Юрий Федоров © (11.02.04 22:16) [7]

Да, с внешними ссылками, конечно, так. А счетчик внутренних будет вести сам List - при вызовах Delete, Insert, Add, Remove...



Страницы: 1 вся ветка

Текущий архив: 2004.02.25;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.029 c
1-79858
_Студент_
2004-02-10 16:37
2004.02.25
Packed record - работа с файлами.


4-80371
DMichael
2003-12-16 10:50
2004.02.25
Процесс от имени другого пользователя


1-79799
atmospheric
2004-02-11 15:38
2004.02.25
Как установить время ?


1-79987
ALF
2004-02-13 00:44
2004.02.25
Разбивка строки на несколько строк...


1-79976
Аноним
2004-02-13 16:21
2004.02.25
Реестр