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

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

Локальные объекты


Ш-К ©   (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


когда кол-во ссылок на объект станет равным нулю (а это случится по выходу из процедуры), он сам себя пристрелит.


Наверх

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