![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Где в таком случае делать try? [D7, 2000, XP]
БезымянныйСтудент © (2011-10-08 18:02:00)Изучаю правильную работу с объектами классов VCL.
Нашёл совет что всегда нужно обязательно делать так:
cls:=MyClass.Create();
try
cls.dosomething(); // используем ресурс
finally
cls.Free; // освобождение ресурса
end;
Оно всё вроде понятно, но что делать если я создаю объект при запуске приложения, а удалять надо при закрытии?
Например TBitmap... Где тогда делать Try? Как поступать в таком случае?
p.s. Интернета у меня нету, вернусь через неделю... =(
QAZ (2011-11-02 13:05:00) [21]
> что делать
не использовать никаких тру\ексептов никогда и нигде,а все вылазиющие ошибки находить и исправлять
Amoeba_ (2011-11-02 12:55:00) [22]
> А можете посоветовать книгу
http://www.podgoretsky.com/ddp/OtherDDP.aspx
Германн (2011-11-02 12:18:00) [23]
> А получается при использовании объекта-поля или глобального
> объекта надо try/except тогда?
>
try/except это вообще другая опера.
Anatoly Podgoretsky (2011-11-02 12:04:00) [24]
> Так вот я и спрашиваю - а куды тогда try/finally?))
Кода нет
БезымянныйСтудент (2011-11-02 11:37:00) [25]> Dimka Maslov © (02.11.11 11:26) [10]
Спасибо... =)
А можете посоветовать книгу именно про такое? У меня дома и-нета нет, гуглить негде... Буду благодарен какому-то конкретному названию...
А получается при использовании объекта-поля или глобального объекта надо try/except тогда?
Dimka Maslov (2011-11-02 11:26:00) [26]Сперва надо разобраться, что такое try...finally...end. Потом понять в чём отличие глобального объекта, объекта-поля класса и локального объекта внутри процедуры/функции. Тогда станет ясно, что
1. Глобальные объекты создаются в секции initialization модулей, а освобождаются в finalization. Никакого трая не надо.
2. Объект-поле создаётся в конструкторе другого объекта, а освобождается в деструкторе. Никакого трая не надо.
3. Локальный объект создаётся и освобождается внутри метода. При этом буде возникнет исключение, объект не удалится и продолжить своё существование в куче. Чтобы избежать этой ситуации и используется блок трай...финалли...енд.
БезымянныйСтудент (2011-11-02 11:19:00) [27]Простите что долго не был, я тут болел... =(
> Если объект является полем какого либо класса, то можно создавать в конструкторе, а удалять в деструкторе.
Так вот я и спрашиваю - а куды тогда try/finally?))
Наверное тогда try/except при работе с экземпляром? А создание и освобождение экземпляра не надо в try засовывать?
> Почему негде, может и есть где, но кода нет.
Я хочу научиться правильному подходу... Для любого кода...
> хотя, в общем-то, оно само очистится
Ну как ж не надо-то? Освобождение ж всегда надо... А если при закрытии TForm программа ещё не завершает работу?
Германн (2011-10-09 00:21:00) [28]
> но что делать если я создаю объект при запуске приложения,
> а удалять надо при закрытии?
Ничего не надо делать. Винда всё сделает сама.
Омлет (2011-10-08 21:03:00) [29]Удалено модератором
Inovet (2011-10-08 20:46:00) [30]Код через неделю будет, может.
Anatoly Podgoretsky (2011-10-08 20:14:00) [31]Почему негде, может и есть где, но кода нет.
_Юрий (2011-10-08 20:12:00) [32]потому что негде
Anatoly Podgoretsky (2011-10-08 19:54:00) [33]Try тогда делать не надо.
DVM (2011-10-08 19:53:00) [34]
> БезымянныйСтудент (08.10.11 18:02)
> но что делать если я создаю объект при запуске приложения,
> а удалять надо при закрытии?
Если объект является полем какого либо класса, то можно создавать в конструкторе, а удалять в деструкторе. Если объект не является полем класса, то все точно так же как ты написал.
antonn (work) (2011-10-08 19:09:00) [35]не try, а finally, там еще except'ы всякие есть.
при создании ставить блок обработки ошибок, удалять в событии на закрытие (хотя, в общем-то, оно само очистится)