Текущий архив: 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.46 MB
Время: 0.036 c