Вниз
Скачать: CL | DM;

Как избежать варинига при создании объекта в try finally   Найти похожие ветки 

← →
Игорь Шевченко ©   (2006-05-26 12:27) [40]


> TFileStream при отсутствии файлов


Получу.


> TForm при недостатке оконных ресурсов


Не получу


> TBrush - при недостатке граф. ресурсов


Не получу


← →
Zz_   (2006-05-26 12:44) [41]

Взлетит :)


← →
Fay ©   (2006-05-26 13:17) [42]

Удалено модератором


← →
jack128 ©   (2006-05-26 15:58) [43]

Игорь Шевченко ©   (26.05.06 12:27) [40]
> TForm при недостатке оконных ресурсов

Не получу


procedure TWinControl.CreateWnd;
begin
...
   CreationControl := Self;
   CreateWindowHandle(Params);
   if FHandle = 0 then
     RaiseLastOSError; //!!!!!!!!!
...
end; Отсюда следует, что если хендл не удаётся создать - будет поднято исключение.

constructor TForm2.Create(AOwner: TComponent);
begin
 inherited;
 ShowMessage(BoolToStr(HandleAllocated, True)); //  Выведет True.  Следовательно в конструкторе была попытка создать хендл. Удачная попытка.
end;

Игорь Шевченко ©   (26.05.06 12:27) [40]
> TBrush - при недостатке граф. ресурсов

Не получу

Хм. Да, тут поторопился.


← →
jack128 ©   (2006-05-26 16:00) [44]

jack128 ©   (26.05.06 15:58) [43]
constructor TForm2.Create(AOwner: TComponent);
begin
inherited;
ShowMessage(BoolToStr(HandleAllocated, True)); //  Выведет True.  Следовательно в конструкторе была попытка создать хендл. Удачная попытка.
end;


А!!! Черт, и здесь облажался.


← →
Игорь Шевченко ©   (2006-05-26 16:01) [45]

jack128 ©   (26.05.06 15:58) [43]


> Отсюда следует, что если хендл не удаётся создать - будет
> поднято исключение


С этим никто не спорит. Но это произойдет не в конструкторе формы, если она не visible.


← →
jack128 ©   (2006-05-26 16:43) [46]

Ладно, чтоб уж совсем не чувствовать себя проигравшим в споре отмечу, что при создании _любого_ объекта можно получить исключение.  EOutOfMemory  :-)


← →
Джо ©   (2006-05-26 16:45) [47]

> что при создании _любого_ объекта можно получить исключение.
> EOutOfMemory  :-)

Вот только есть сомнение, что это исключение удастся корректно обработать :)


← →
Игорь Шевченко ©   (2006-05-26 16:45) [48]

jack128 ©   (26.05.06 16:43) [46]

Женя, а спора, собстна никакого нету. Я никоим боком не хочу убедить кого-то не использовать исключения в конструкторах. Просто я могу повторить, что поиском наиболее распространенных приемов программирования я занимаюсь в исходниках VCL, кстати, там на EOutOfMemory конструируемые объекты не проверяются :)


← →
Сергей М. ©   (2006-05-26 16:46) [49]


> jack128 ©   (26.05.06 16:43) [46]


> можно получить исключение.  EOutOfMemory


Запросто.
Так что правда и на твоей стороне)


← →
Жуков Олег   (2006-05-26 21:36) [50]

Простой способ получить Exception в конструкторе любого компонента. Вполне вероятный.

 SomeComponent1: TSomeComponent;
 SomeComponent2: TSomeComponent;

 SomeComponent1 := TSomeComponent.Create(nil);
 ...
 SomeComponent1.Free();
 ...
 SomeComponent2 := TSomeComponent.Create(SomeComponent1);


← →
novill ©   (2006-05-29 10:40) [51]

Так как же все-таки правильно делать?


← →
Palladin ©   (2006-05-29 11:18) [52]


> novill ©   (29.05.06 10:40) [51]

obj:=TObj.Create;
Try
Finally
obj.Free;
End;



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

Скачать: CL | DM;



Память: 0.54 MB
Время: 0.025 c
3-1147116316
Галинка
2006-05-08 23:25
2006.07.09
Сохранить массив в БД


1-1148542464
inew
2006-05-25 11:34
2006.07.09
Компонет indy10. Ограничение на размер файла.


2-1151083509
resuS
2006-06-23 21:25
2006.07.09
SOCKS прокси сервер 4/5


15-1150194374
QuickFinder
2006-06-13 14:26
2006.07.09
Раскодировать данные


3-1146625597
гога
2006-05-03 07:06
2006.07.09
Двухстрочный заголовок DBGrid




   Наверх