![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
Rennigth |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 49 Всего: 76 |
Нужно ли проверять на Assigned объект перед разрушением?
В методе Free стоит проверка:
если у нилового указателя на объект вызвать Free то AV не будет, но Free вроде не Class function... как это понимать? -------------------- (* Honesta mors turpi vita potior *) |
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Нет, не нужно - Free это сама делает.
Free не класс функция, но и не обращается к полям - лишь проверяет себя. Функция класса - больше формальное явление. Единственная разница в дельфи - функция класса получает указатель на класс, а не на объект. Вызываться функции могут без создания объекта. Любые. Но Free и не должна быть функцией класса - иначе она не сможет себя проверить. |
|||
|
||||
Rennigth |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 49 Всего: 76 |
Snowy, Спасибо, но все равно доконца не понял, т.е. Free вызывается всетаки для указателя на класс а не объект? а что тогда есть Self в методе Free?
-------------------- (* Honesta mors turpi vita potior *) |
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Нет, Free - это не метод класса. Поэтому Self указывает именно на объект.
Я говорю про то, что любой метод может быть вызван без создания объекта. Просто, если метод обращается к полям, а объект не создан, то будет AV. Free не обращается к полям - просто проверяет себя на существование и вызывает виртуальный Destroy. Поэтому нет никакого AV. |
|||
|
||||
Matematik |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1027 Регистрация: 11.3.2006 Репутация: 17 Всего: 50 |
||||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 4 Всего: 260 |
Rennigth, нет. метод Free в качестве self имеет указатель на объект, а не класс.
|
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Например:
Да, он выдаст AV, но выдаст его только, когда в реализации самого метода будет обращение к полям. Если бы обращения к полям не было, не было бы и AV. В Free обращения к полям нет - поэтому нет AV. Здесь чёткая разница между дельфи и Java - в джаве для каждого объекта своя копия кода. И без создания объекта можно вызывать только методы класса. В дельфи же копия кода всегда одна и она доступна для вызова независимо от того, создан объект или нет. Поэтому мы и можем вызывать Free, независимо от наличия объекта. |
|||
|
||||
Rennigth |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 49 Всего: 76 |
спасибки, вроде прояснилось
![]() -------------------- (* Honesta mors turpi vita potior *) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |