Вниз
Скачать: 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.03 c
2-1151056476
fedpavel
2006-06-23 13:54
2006.07.09
Ошибка при выполнении запроса


3-1146895018
Alexandr1
2006-05-06 09:56
2006.07.09
Коннект к БД на локальном компутере из зоны инета


2-1150989669
DevilDevil
2006-06-22 19:21
2006.07.09
Перехват Клавиатурного Перехватчика


2-1150976741
Tochka
2006-06-22 15:45
2006.07.09
Выключение комьпютера


1-1148834816
Mixa
2006-05-28 20:46
2006.07.09
построение графиков Chart




   Наверх