![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Указатели и классовые переменные
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. Иначе будет не создание, а переинициализация. И с любым другим классом -- так же.