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

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

Бывают ли объекты с self=nil?


Страницы:   1 2

Bless ©   (2005-07-04 16:07:00) 

Посмотрел в модуле system реализацию метода TObject.Free:


procedure TObject.Free;
begin
 if Self <> nil then
   Destroy;
end;


Что, разве могут быть случаи, когда Self=nil?


Bless   (2005-07-04 17:04:00) [21]

Спасибо


begin...end   (2005-07-04 16:19:00) [22]

> Гаврила ©   (04.07.05 16:17) [2]

> внутри SomeMethod Self как раз будет равен nil

Уточнение: если SomeMethod не является классовым методом.


Гаврила   (2005-07-04 16:19:00) [23]

В дополнение
SomeMethod должен быть статическим. Иначе мы туджа не попадем - вывалимся при попытке определения адреса в VMT.
В принципе, такая ситуация (в случае статичесмкого метода) может быть нормальной. Разумеется ,в жтом случае нельзя обращаться к полям объекта и вызывать виртуальные (динамические) методы.


Stakan   (2005-07-04 16:18:00) [24]

Не успел :(


isasa   (2005-07-04 16:18:00) [25]

на самом деле точка входа в метод описывается как
procedure TObject.Free(self: pointer);
т.е. self не глобальная переменная.


Stakan   (2005-07-04 16:17:00) [26]

Бывают.
var
 O: Tobject;
begin
 O := nil;
 O.Free;
end;


-=XP=-   (2005-07-04 16:17:00) [27]

TObject(nil).Free;


Гаврила   (2005-07-04 16:17:00) [28]

Var
MyObj: TMyObj;
...
MyObj:=nil;
MyObj.SomeMethod;

внутри SomeMethod Self как раз будет равен nil


begin...end   (2005-07-04 16:16:00) [29]

> Bless ©   (04.07.05 16:07)

> Что, разве могут быть случаи, когда Self=nil?

TObject(nil).Free


Страницы:   1 2

Наверх

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