Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Общие вопросы > Нужно ли проверять на Assigned |
Автор: Rennigth 9.10.2006, 10:39 | ||
Нужно ли проверять на Assigned объект перед разрушением? В методе Free стоит проверка:
если у нилового указателя на объект вызвать Free то AV не будет, но Free вроде не Class function... как это понимать? |
Автор: Snowy 9.10.2006, 10:44 |
Нет, не нужно - Free это сама делает. Free не класс функция, но и не обращается к полям - лишь проверяет себя. Функция класса - больше формальное явление. Единственная разница в дельфи - функция класса получает указатель на класс, а не на объект. Вызываться функции могут без создания объекта. Любые. Но Free и не должна быть функцией класса - иначе она не сможет себя проверить. |
Автор: Rennigth 9.10.2006, 11:07 |
Snowy, Спасибо, но все равно доконца не понял, т.е. Free вызывается всетаки для указателя на класс а не объект? а что тогда есть Self в методе Free? |
Автор: Snowy 9.10.2006, 11:13 |
Нет, Free - это не метод класса. Поэтому Self указывает именно на объект. Я говорю про то, что любой метод может быть вызван без создания объекта. Просто, если метод обращается к полям, а объект не создан, то будет AV. Free не обращается к полям - просто проверяет себя на существование и вызывает виртуальный Destroy. Поэтому нет никакого AV. |
Автор: Matematik 9.10.2006, 11:14 | ||
|
Автор: skyboy 9.10.2006, 11:16 |
Rennigth, нет. метод Free в качестве self имеет указатель на объект, а не класс. |
Автор: Snowy 9.10.2006, 11:19 | ||
Например:
Да, он выдаст AV, но выдаст его только, когда в реализации самого метода будет обращение к полям. Если бы обращения к полям не было, не было бы и AV. В Free обращения к полям нет - поэтому нет AV. Здесь чёткая разница между дельфи и Java - в джаве для каждого объекта своя копия кода. И без создания объекта можно вызывать только методы класса. В дельфи же копия кода всегда одна и она доступна для вызова независимо от того, создан объект или нет. Поэтому мы и можем вызывать Free, независимо от наличия объекта. |
Автор: Rennigth 9.10.2006, 11:25 |
спасибки, вроде прояснилось ![]() |