Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.063 c
15-1159107170
MixAnOL
2006-09-24 18:12
2006.10.15
OLE сервер и JavaScript в IE


15-1159255048
Экспериментатор
2006-09-26 11:17
2006.10.15
Перемешались знаки препинания, звездочки кавычки


4-1149090395
DeeGreeZ
2006-05-31 19:46
2006.10.15
Работа с ИК портом


15-1158909880
Desdechado
2006-09-22 11:24
2006.10.15
Равноденствие, новолуние, солнечное затмение


1-1157712245
TakTak
2006-09-08 14:44
2006.10.15
поместить в автозагрузку программу.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский