Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Где в таком случае делать try? [D7, 2000, XP]


Страницы:   1 2

БезымянныйСтудент ©   (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'ы всякие есть.
при создании ставить блок обработки ошибок, удалять в событии на закрытие (хотя, в общем-то, оно само очистится)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо