Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Указатели и классовые переменные


LordOfRock ©   (2006-02-14 13:39:00) 

За неимением инструкции по делфи, задаю такой дебильный вопрос.

Есть класс. Добустим TMyClass

Создаю переменную классового типа: MyClass : TMyClassи делаю ей Create

Потом добавляю эту переменную в несколько экземпляров TList'a, допустим так:

var
 List1 : Tlist;
 List2 : TList;
begin
 List1.Create;
 List2.Create;
 List1.Add(MyClass);
 List2.Add(MyClass);
end;


При получении из одного Листа классовой переменной,затем изменения некоторых свойств: эти изменения отразятся сразу во всех Листах, или прописывать надо будет?


LordOfRock   (2006-02-14 14:37:00) [1]

begin...end ©   (14.02.06 13:55) [1]
begin...end ©   (14.02.06 14:04) [2]
Огромное спасибо за разъяснение. Собственно, на подсознательном уровне так и думал, но теперь вголове полная ясность.


begin...end   (2006-02-14 14:04:00) [2]

> При этом элемент второго списка продолжает указывать на
> тот же самый экземпляр.

Чтобы не было неясностей, поясню: на тот же самый экземпляр, на который указывает элемент первого списка.


begin...end   (2006-02-14 13:55:00) [3]

> LordOfRock ©   (14.02.06 13:39)

> Создаю переменную классового типа: MyClass : TMyClass и
> делаю ей Create...

...и после этого переменная MyClass начинает указывать на некоторую структуру в памяти -- экземпляр класса.

> Потом добавляю эту переменную в несколько экземпляров TList'a...

...т.е. в несколько списков будет добавлен указатель на один и тот же экземпляр класса.

> При получении из одного Листа классовой переменной,затем
> изменения некоторых свойств...

...будет изменён экземпляр класса, на который она указывает. При этом элемент второго списка продолжает указывать на тот же самый экземпляр.

> ...эти изменения отразятся сразу во всех Листах?

В самих "листах" никаких изменений не будет -- в них, как и ранее, находятся указатели, значение которых (адрес экземпляра) не поменялось. А вот сам экземпляр, возможно, поменялся, и указатели из обоих списков теперь содержат адрес уже изменённого экземпляра.

> List1.Create;

List1 := TList .Create. Иначе будет не создание, а переинициализация. И с любым другим классом -- так же.


Наверх

Титульная страница Поиск, карта сайта Написать письмо