| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Сравнение кода по работе с памятью |
| Автор: midiar 23.10.2005, 18:56 | ||||||
| Добрый день. Интересует вопрос о том какой код правильнее, вот три варианта: 1.
2.
3.
|
| Автор: Poseidon 23.10.2005, 19:43 |
| Освобождать память нужно в любом случае. Знать бы еще что скрывается за точками, но раз это не известно, то второй. |
| Автор: midiar 23.10.2005, 19:59 |
| А если q было создано нормально, а при создании c или t произошла ошибка? |
| Автор: Poseidon 23.10.2005, 20:19 |
| И когда это при создании компонентов происходили ошибки? На моей практике не было такого еще. |
| Автор: midiar 23.10.2005, 20:33 |
| В конструкторе ADO компонентов вызывается функция CreateADOObject, которая может генерить исключение. То есть теоретически трабл может быть. |
| Автор: Rennigth 24.10.2005, 09:15 | ||
Попробуй создать TAdoConnection без предворительного Application.Initialize. midiar Я тоже задавался этим вопросом, но почему-то использую конструкцию 2. |
| Автор: ~FoX~ 24.10.2005, 14:15 |
| midiar А если почитать как работает try....except....finale? |
| Автор: midiar 24.10.2005, 18:23 |
| Загадками изволите разговаривать. В этой теме загадку задал я |
| Автор: p0s0l 24.10.2005, 19:54 | ||
| Третий вариант хуже второго по след. причинам: - в случае Exit не освободится память - в случае исключения в обработчике исключений Второй вариант лишен этих недостатков... Но он хуже первого варианта по причине возможности исключения в конструкторах, об этом уже тут говорилось... Поэтому среди предложенных мой выбор - первый вариант PS: проверять на nil перед вызовом Free не стоит, т.к. Free это делает сам:
PPS: теоретически возможны исключения в деструкторах |
| Автор: midiar 24.10.2005, 20:10 |
| Генерить исключеня в деструкторах - это моветон Мне первый вариант тоже больше нравится |