![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
вот такой вот вопрос [D6, Win2k]
Palladin © (2002-11-30 23:22:00)освобождается ли класс переданный параметром процедуре...
для ясности напишу две вещи
Описание:
TSimplyClass=class
private
m_Memo:TMemo;
public
constructor Create(Memo:TMemo);
destructor Destroy;override;
property PrMemo:TMemo read m_Memo;
end;
constructor TSimplyClass.Create;
begin
m_Memo:=Memo;
m_Memo.Lines.Add("Created");
end;
destructor TSimplyClass.Destroy;
begin
m_Memo.Lines.Add("Destroyed");
end;
и вот такая вещь первая:
procedure MyDestroy(var aClass:TSimplyClass);
begin
aClass.free;
end;
эксперимент:
sc:=TSimplyClass.Create(Memo1);
MyDestroy(sc);
sc.PrMemo.Lines.Add("ква ква");
1. Освободится или нет?
2. Должна ли переменная класса в nil устанавливатся при осбождении? Судя по всему не устанавливается так так "ква ква" благополучно добавилось в мемо...
и вторая вещь: если так
передаем не ссылку на ссылку :) а саму ссылку... хотя не знаю... может и в первом случае тоже сам класс передается...
procedure MyDestroy(aClass:TObject); begin
aClass.free;
end;
и в этом случае та же самая ситуация что и в первом... "ква ква" прекрасно влезает в мемо
разъясните механизм плиз... :(
Palladin (2002-11-30 23:55:00) [1]:)
круто :)
все мы там будем... хорошо если не затрут :)
спасибо...
TTCustomDelphiMaster (2002-11-30 23:51:00) [2]1. Освободится или нет?
Освободится.
2. Должна ли переменная класса в nil устанавливатся при осбождении?
Не должна. Если нужно устанавливайте сами.
разъясните механизм плиз
После освобождения объекта, память занимаемая им содержит ту же информацию что и при жизни объекта, пока не будет занята под что то другое. При этом ничто не мешает программе работать так, как будто объект не был удален (жизнь после смерти :)