![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Бывают ли объекты с self=nil?
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