Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.09.30;
Скачать: [xml.tar.bz2];

Вниз

И опять идеологический вопрос   Найти похожие ветки 

 
qube   (2002-09-19 10:59) [0]

Нужно создать класс, допустим, TFooEngine. В системе будет присутствовать только один глобальный экземпляр этого класса. Как лучше: наследовать TFooEngine от TComponent и создавать его с Application в качестве владельца, или просто

Engine := TFooEngine.Create(..);
Application.Run;
Engine.Free;


 
Separator   (2002-09-19 11:03) [1]

Можешь ему вообще не передавать владельца, главное потом не забудь Free сделать


 
qube   (2002-09-19 11:05) [2]


> Можешь ему вообще не передавать владельца, главное потом
> не забудь Free сделать

Тогда и от TComponent наследовать, собственно, незачем. Вопрос вот в чем: возможно ли, что при втором способе при аварийном завершении или еще какой беде Engine.Free не вызовется?


 
Старый Паскалист   (2002-09-19 11:12) [3]

сделай создание и разрушение в initialization/finalization.
А ещё лучше - сделай сознание по требованию,

function Engine: TFooEngine;
begin
if theEngine{глобальная переменная, определённая в impl.} = nil then
theEngine := TFooEngine.Create;
Result := theEngine;
end;

initialization
finalization
theEngine.Free; // вызовется всегда
end.

А связываться с TComponent и Application действительно
совершенно незачем.



 
qube   (2002-09-19 11:14) [4]

Спасибо.


 
Separator   (2002-09-19 11:18) [5]

При аварийном завершении (например если свет вырубили, типа ФСБ приехало) работы все равно ничего не поможет


 
qube   (2002-09-19 11:19) [6]


> Separator ©

:) Мне ФСБ не грозит. Разве что СБУ.


 
Separator   (2002-09-19 11:24) [7]

Понимаю, мне тоже не грозить, зато может КНБ наехать ;)


 
qube   (2002-09-19 11:26) [8]

КНБ -- это что?
(Ох, чувствую, удалят эту ветку в "Потрепаться")


 
Separator   (2002-09-19 11:32) [9]

"Комитет национальной безопасности"
(Я тож так думаю)


 
qube   (2002-09-19 11:35) [10]

Да, тут мысль пришла.
А если конструктор у этого TFooEngine с параметрами, то создание по требованию уже не подходит. Я понимаю, что есть туча способов, а хочется красивенько.


 
Separator   (2002-09-19 11:50) [11]

Почему не подходит? Просто создавай когда надо и все будет ок.

type
TFooEngine = class;
public
constructor Create(Parametrs); override;
end;

implementation

var
theEngine: TFooEngine;

constructor TFooEngine.Create(Parametrs);
begin
inherited Create;
// Делай что-нибудь
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if theEngine=nil then
theEngine:= TFooEngine.Create(Parametrs)
end;

finalization
if theEngine<>nil then
theEngine.Free
end.


 
qube   (2002-09-19 11:52) [12]

ок, вопрос закрыт.
всем спасибо.

сотворил, как обычно, много шуму из ничего.


 
Старый Паскалист   (2002-09-19 11:55) [13]

function Engine: TFooEngine;
begin
if theEngine = nil then
theEngine := TFooEngine.Create(какие-то параметры по умолчанию);
// Параметры по умолчанию могут, например, грузиться из ini-файла

Result := theEngine;
end;



procedure CreateEngineWithParams(......);
// даёт возможность приложению определить, с какими параметрами
// нужно создавать Engine.
// эта процедура специально не объявлена, как ф-я,
// поскольку она мжет быть вызвана только один раз
// при запуске.
// Эта процедура вовсе не обязана действительно создавать
// объект, она может просто сохранить где-то
// параметры, которые будут извлечены при создании по требованию
begin
if theEngine = nil then
theEngine := TFooEngine.Create(......)
else
raise ...;
end;

Но вообще говоря, с моей точки зрения, возможность конструирования
разными способами не должна быть характерен для синглтонов.

Ведь в любом случае в каждом приложении ты сможешь вызвать
конструктор только с одним конкретным набором параметров.



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

Форум: "Основная";
Текущий архив: 2002.09.30;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.009 c
1-98104
Донской
2002-09-19 19:21
2002.09.30
Ошибка в режиме написания кода


1-98166
Basilio
2002-09-17 15:01
2002.09.30
Внешнее скроллирование TRichEdit


7-98391
Kick
2002-06-19 13:44
2002.09.30
Как можно программно свернуть все окна?


1-98027
Alex17
2002-09-17 13:07
2002.09.30
Вопрос по FIBPlus.


1-98074
Oxy2
2002-09-19 12:47
2002.09.30
Динамические структуры





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский