Главная страница
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.033 c
3-1155984409
Lexx_
2006-08-19 14:46
2006.10.15
Autoincrement + ADOCommand


3-1155380497
Andrew___*
2006-08-12 15:01
2006.10.15
Как скрыть повторяющиеся записи?


3-1155808870
rsq_
2006-08-17 14:01
2006.10.15
odbc c поддержкой unicode


15-1159197705
Konstantin555
2006-09-25 19:21
2006.10.15
Как в Microsoft Excel записать ячейку-константу?


15-1159093206
TUser
2006-09-24 14:20
2006.10.15
PowerPoint