Форум: "Начинающим";
Текущий архив: 2006.10.15;
Скачать: [xml.tar.bz2];
ВнизЛокальные объекты Найти похожие ветки
← →
Ш-К (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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.041 c