Vapaamies писал(а):Смиялсо. Скажу вам по секрету: именно так работает TObject.Free.
То есть? В коде FPC там везде фигурирует Self, насколько я вижу.
Модератор: Модераторы
Vapaamies писал(а):Смиялсо. Скажу вам по секрету: именно так работает TObject.Free.


Vapaamies писал(а):Сермяжный смысл в том, что методы, не обращающиеся к полям объекта, вполне штатно можно вызывать и для неинициализированного экземпляра.

Максим писал(а):Просто ваш комментарий подразумевал, что Free работает принципиально с неинициализированным объектом, хотя из кода этого не следует, а, как раз, напротив, он в этом случае ничего не делает.
Максим писал(а):Резковато выразились?
NTFS писал(а):Потому что нет никакого смысла в вызове метода у несозданного объекта.
Максим писал(а):Вы можете привести внятный пример, где это требуется


Vapaamies писал(а):Как бы то ни было, TSharedObject(nil).Ref и TSharedObject(nil).Release вызываются и не падают.

program Project1;
Type
{ TFoo }
 TFoo = Class
Private
  Public
    A: Integer; Static;
    Class Procedure Bar;
End;
{ TFoo }
Class Procedure TFoo.Bar;
Begin
  WriteLn('Hello World ', A, ' times');
End;
begin
  TFoo.A := 10;
  TFoo.Bar;
end.
Vapaamies писал(а):Но вызывается-то он в том числе и для nil
Vapaamies писал(а):Забыл уточнить, что методы класса тут не подходят, потому как добавляются и освобождаются ссылки на конкретные объекты.
Vapaamies писал(а):Сермяжный смысл в том, что методы, не обращающиеся к полям объекта, вполне штатно можно вызывать и для неинициализированного экземпляра.


Kemet писал(а):Vapaamies, а что у Вас там за проект Ono?

TObject.Free по своей логике предназначен для вызова в том числе и для nil-объектов, для чего он вначале проверяет, не равен ли Self nil,


Рождённый_в_СССР писал(а):если уж Паскаль не видет смысла в вызове метода у не созданного объекта, почему он это компилирует?

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1