Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.02.25;
Скачать: [xml.tar.bz2];

Вниз

Уникальность 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.039 c
6-80060
korvin
2003-12-18 16:41
2004.02.25
Избито и тривиально, но ... сокеты


6-80061
Term!
2003-12-19 12:22
2004.02.25
Не работает Win-CGI приложение


7-80322
Chery
2003-12-04 15:02
2004.02.25
Обратиться к флопику, открыть с дискеты файл ?


1-79726
Роман
2004-02-12 16:08
2004.02.25
Про реестр Windows


6-80062
Anet
2003-12-16 13:09
2004.02.25
Отследить вход пользователя в сеть





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский