Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.018 c
1-79884
8ung
2004-02-09 20:54
2004.02.25
Слишком медленная работа с файлами.


14-80242
able
2004-02-03 16:20
2004.02.25
Задержка.


7-80327
KommandorDi
2003-12-01 19:15
2004.02.25
Пока работает моя программа Windows не может завершиться


1-79978
@G
2004-02-14 19:08
2004.02.25
Форма без значков


14-80100
Layner
2004-02-05 14:52
2004.02.25
Выводил ли кто нибудь WMZ (WebMoney) в наличку?




   Наверх