Вниз
Скачать: 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.017 c
1-79793
Leech
2004-02-11 16:29
2004.02.25
---|Ветка была без названия|---


6-80081
Слэш
2003-12-20 17:28
2004.02.25
Версия файла на FTP


1-79744
CacoDemon
2004-02-12 10:49
2004.02.25
Можно ли в RichEdit...


14-80262
olookin
2004-02-04 12:50
2004.02.25
Защита


1-79733
Крутыш
2004-01-23 13:44
2004.02.25
Изменение размеров формы при активации.




   Наверх