
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.217.4] |
![]() |
|
Страницы: (4) « Первая ... 2 3 [4] все ( Перейти к последнему сообщению ) |
Сообщ.
#46
,
|
|
|
По with CodeMonkey всё хорошо расписал, а на часть по Exit можно ответить вашими же словами:С помощью Exit очень удобно множить неочевидность в коде, наличие этой команды почти всегда является признаком необходимости рефакторинга.
Цитата CodeMonkey @ Отличный пример, хоть сразу в учебник не вставляй Представим, что в деструкторе объекта (объект-контейнер) мы удаляем объектное поле с помощью Free. В деструкторе этого поля вызывается виртуальный метод, который ничего не делает в базовом классе, а в каком-то далёком предке вызывает последовательность действий, которая приводит к вызову виртуального-же метода объекта-контейнера. Который, в свою очередь, в каком-нибудь далёком предке (ошибочно) обращается к нашему удаляемому полю. При этом, обращение проходит на ура, но общее состояние становится безвозвратно испорченным. Упс. ![]() |
Сообщ.
#47
,
|
|
|
CodeMonkey
PPS: В принципе я с тобой согласен, поэтому чтобы завершить дискуссию на позитивной ноте, (слегка поморщившись) могу присоединиться к твоей рекомендации для бегинеров - юзать FreeAndNil вместо Free ![]() |