![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Локальные объекты
Ш-К © (2006-09-22 12:11:00)Наткнулся на такой код:
procedure TClient.SampleOperation;
var
Builder :TConcreteBuilder;
Product :IProduct;
begin
Builder := TConcreteBuilder.Create();
TDirector.Create(Builder).Construct();
Product := Builder.GetResult();
end;
С какой версии Delphi стало возможным не дестроить локальные объекты принудительно?
Игорь Шевченко (2006-09-28 13:25:00) [1]Ш-К (28.09.06 13:04) [13]
TDefault = class(TInterfacedObject)
public
destructor Destroy; override;
end;
destructor TDefault.Destroy;
begin
ShowMessage('Destroyed');
inherited;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
lDefault: IUnknown;
begin
lDefault:= TDefault.Create;
end;
Плохиш (2006-09-28 13:21:00) [2]
> С какой версии Delphi стало возможным не дестроить локальные
> объекты принудительно?
С той, в которой появились интерфейсы.
zamtmn (2006-09-28 13:20:00) [3]>>По-моему, с четвертой.
помоему это даже не планируется
Ш-К (2006-09-28 13:04:00) [4]
> По-моему, с четвертой.
TDefault = class(TObject)
public
destructor Destroy; override;
end;
.....
destructor TDefault.Destroy;
begin
ShowMessage('Destroyed');
inherited;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
lDefault: TDefault;
begin
lDefault:= TDefault.Create;
end;
Что-то не убивается.
Игорь Шевченко (2006-09-22 13:43:00) [5]
> С какой версии Delphi стало возможным не дестроить локальные
> объекты принудительно?
По-моему, с четвертой.
Ega23 (2006-09-22 13:38:00) [6]
> а что тут такого?
Да как-то не вписывается в общий стиль... Можно, но как-то не принято...
StriderMan (2006-09-22 13:33:00) [7]
> А если бы вызывался, как бы TDirector.Create убился.
нормально бы убился, как например
TSomeControl.Create(Form1).Parent := Form1;
тоже пристрелицца при разрушении формы
Ш-К (2006-09-22 13:06:00) [8]
> > Builder.GetResult();
>
> может там деструктор вызываецо?
Не вызывается. А если бы вызывался, как бы TDirector.Create убился.
ЮЮ (2006-09-22 13:05:00) [9]вот до чего довела .NET такой всегда строгий Object Pascal :(
StriderMan (2006-09-22 13:02:00) [10]
> Ega23 © (22.09.06 12:59) [6]
> У меня больше удивлений вот это вызывает: TDirector.Create(Builder).
> Construct();
а что тут такого?
Ega23 (2006-09-22 12:59:00) [11]У меня больше удивлений вот это вызывает: TDirector.Create(Builder).Construct();
StriderMan (2006-09-22 12:55:00) [12]
> Builder. GetResult();
может там деструктор вызываецо?
ЮЮ (2006-09-22 12:53:00) [13]
> С какой версии Delphi стало возможным не дестроить локальные
> объекты принудительно?
Это было возможно всегда и называлось утечкой памяти :)
Ш-К (2006-09-22 12:52:00) [14]Так убивает или не убивает?
Этот код генерится в BDS2006 по применению паттерна Builder.
Может генератор не видит разницы между Win32 | .Net
Ega23 (2006-09-22 12:28:00) [15]
> С какой версии Delphi стало возможным не дестроить локальные
> объекты принудительно?
Лучше скажи, когда это Делфи убивал локальные объекты принудительно?
StriderMan (2006-09-22 12:27:00) [16]скорее всего ответ тут:
> Product :IProduct
когда кол-во ссылок на объект станет равным нулю (а это случится по выходу из процедуры), он сам себя пристрелит.