Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.15;
Скачать: CL | DM;

Вниз

Локальные объекты   Найти похожие ветки 

 
Ш-К   (2006-09-22 12:11) [0]

Наткнулся на такой код:

procedure TClient.SampleOperation;
var
 Builder :TConcreteBuilder;
 Product :IProduct;
begin
   Builder := TConcreteBuilder.Create();
   TDirector.Create(Builder).Construct();
   Product := Builder.GetResult();
end;

С какой версии Delphi стало возможным не дестроить локальные объекты принудительно?


 
StriderMan ©   (2006-09-22 12:27) [1]

скорее всего ответ тут:

> Product :IProduct


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


 
Ega23 ©   (2006-09-22 12:28) [2]


> С какой версии Delphi стало возможным не дестроить локальные
> объекты принудительно?


Лучше скажи, когда это Делфи убивал локальные объекты принудительно?


 
Ш-К   (2006-09-22 12:52) [3]

Так убивает или не убивает?
Этот код генерится в BDS2006 по применению паттерна Builder.
Может генератор не видит разницы между Win32 | .Net


 
ЮЮ ©   (2006-09-22 12:53) [4]


> С какой версии Delphi стало возможным не дестроить локальные
> объекты принудительно?

Это было возможно всегда и называлось утечкой памяти :)


 
StriderMan ©   (2006-09-22 12:55) [5]


> Builder.GetResult();

может там деструктор вызываецо?


 
Ega23 ©   (2006-09-22 12:59) [6]

У меня больше удивлений вот это вызывает: TDirector.Create(Builder).Construct();


 
StriderMan ©   (2006-09-22 13:02) [7]


> Ega23 ©   (22.09.06 12:59) [6]
> У меня больше удивлений вот это вызывает: TDirector.Create(Builder).
> Construct();

а что тут такого?


 
ЮЮ ©   (2006-09-22 13:05) [8]

вот до чего довела .NET такой всегда строгий Object Pascal :(


 
Ш-К   (2006-09-22 13:06) [9]


> > Builder.GetResult();
>
> может там деструктор вызываецо?

Не вызывается. А если бы вызывался, как бы TDirector.Create убился.


 
StriderMan ©   (2006-09-22 13:33) [10]


> А если бы вызывался, как бы TDirector.Create убился.

нормально бы убился, как например

TSomeControl.Create(Form1).Parent := Form1;

тоже пристрелицца при разрушении формы


 
Ega23 ©   (2006-09-22 13:38) [11]


> а что тут такого?


Да как-то не вписывается в общий стиль... Можно, но как-то не принято...


 
Игорь Шевченко ©   (2006-09-22 13:43) [12]


> С какой версии Delphi стало возможным не дестроить локальные
> объекты принудительно?


По-моему, с четвертой.


 
Ш-К   (2006-09-28 13:04) [13]


> По-моему, с четвертой.


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;


Что-то не убивается.


 
zamtmn ©   (2006-09-28 13:20) [14]

>>По-моему, с четвертой.
помоему это даже не планируется


 
Плохиш ©   (2006-09-28 13:21) [15]


> С какой версии Delphi стало возможным не дестроить локальные
> объекты принудительно?

С той, в которой появились интерфейсы.


 
Игорь Шевченко ©   (2006-09-28 13:25) [16]

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



Страницы: 1 вся ветка

Текущий архив: 2006.10.15;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.083 c
2-1159288225
Хм...
2006-09-26 20:30
2006.10.15
Клиент для онлайн-игрушки


3-1155743896
VadimSpb
2006-08-16 19:58
2006.10.15
Проблема с запросом


2-1159528840
RebroFF
2006-09-29 15:20
2006.10.15
Корректное отображение кириллицы


15-1158733343
ПЛОВ
2006-09-20 10:22
2006.10.15
Все восточном календаре


2-1159709498
lobach
2006-10-01 17:31
2006.10.15
Помогите с ini